在实现线程同步时调用dispatch_semaphore_wait出现崩溃,如图:
实现代码如下:
@interface DemoClass ()
//...
@property (nonatomic) dispatch_semaphore_t initSem;
//...
@end
@implementation DemoClass
- (id)init
{
if (self = [super init])
{
//...
self.initSem = dispatch_semaphore_create(1);
}
return self;
}
- (void)start
{
__weak DemoClass *theDemo = self;
dispatch_async(self.queue, ^{
dispatch_semaphore_wait(theDemo.initSem, DISPATCH_TIME_FOREVER);
//...
});
}
最后发现initSem这个属性名称导致崩溃,换了个属性名字后就正常了。怀疑这个属性名字与系统的命名有冲突导致了这种崩溃。还是少以init开头取名字为妙....