您的位置:首页 > 移动开发 > Objective-C

iOS之《Effective Objective-C 2.0》读书笔记(41)

2017-09-07 18:47 393 查看

第41条:多用派发队列,少用同步锁

问题由来:如果有多个线程要执行同一份代码,那么有时候可能会出问题,这种情况下,通常要使用锁/GCD来实现某种同步机制

方法一:同步块

- (void)synchronizedMethod
{
@synchronized (self) {
//Safe
}
}


方法二:使用NSLock对象

_lock = [[NSLock alloc]init];

- (void)synchronizedMethod
{
[_lock lock];
//Safe
[_lock unlock];
}


方法三:串行同步队列

dispatch_queue_t _syncQueue = dispatch_queue_create("com.effective-c.syncQueue", NULL);

-(NSString*) someString {
__block NSString* localSomething;
dispatch_sync(_syncQueue,^{
localSomeString = _someString;
});
return localSomeString
}
-(void) setSomeString:(NSString*) someString{
dispatch_sync(_syncQueue,^{
_someString = someString;
});
}


方法四:并发队列

dispatch_queue_t _concurrentQueue = dispatch_queue_create("com.read-write.queue", DISPATCH_QUEUE_CONCURRENT);

-(NSString*) someString {
__block NSString* localSomething;
dispatch_async(_concurrentQueue,^{
localSomeString = _someString;
});
return localSomeString
}
-(void) setSomeString:(NSString*) someString{
dispatch_barrier_sync(_concurrentQueue,^{  // 栅栏
_someString = someString;
});
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息