考虑以下代码:
@interface ViewController ()
@property (nonatomic, strong) dispatch_source_t source;
@end
@implementation ViewController
-(void)viewDidLoad {
[super viewDidLoad];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
self.source = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
self.source = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
dispatch_resume(self.source);
dispatch_source_set_timer(self.source, dispatch_time(DISPATCH_TIME_NOW, 0.2 * NSEC_PER_SEC), 0.2 * NSEC_PER_SEC, 0.1 * NSEC_PER_SEC);
dispatch_source_set_event_handler(self.source, ^{
NSLog(@"%s",__func__);
});
}
@end
Run Code Online (Sandbox Code Playgroud)
如果我使用dispatch_source_create创建相同的DISPATCH_SOURCE_TYPE_TIMER两次,应用程序将崩溃。为什么?
像上面的例子一样创建一次和两次调度源有什么区别吗?
libdispatch.dylib`_dispatch_xref_dispose:
0x10015e174 <+0>: ldr w8, [x0, #48]
0x10015e178 <+4>: cmp w8, #2 ; =2
0x10015e17c <+8>: b.hs 0x10015e184 ; <+16>
0x10015e180 <+12>: ret …Run Code Online (Sandbox Code Playgroud)