1234567891011121314151617181920212223242526272829303132333435 |
- #import "NMBExceptionCapture.h"
- @interface NMBExceptionCapture ()
- @property (nonatomic, copy) void(^ _Nullable handler)(NSException * _Nullable);
- @property (nonatomic, copy) void(^ _Nullable finally)(void);
- @end
- @implementation NMBExceptionCapture
- - (nonnull instancetype)initWithHandler:(void(^ _Nullable)(NSException * _Nonnull))handler finally:(void(^ _Nullable)(void))finally {
- self = [super init];
- if (self) {
- self.handler = handler;
- self.finally = finally;
- }
- return self;
- }
- - (void)tryBlock:(__attribute__((noescape)) void(^ _Nonnull)(void))unsafeBlock {
- @try {
- unsafeBlock();
- }
- @catch (NSException *exception) {
- if (self.handler) {
- self.handler(exception);
- }
- }
- @finally {
- if (self.finally) {
- self.finally();
- }
- }
- }
- @end
|