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; }); }
相关文章推荐
- iOS之《Effective Objective-C 2.0》读书笔记(9)
- iOS之《Effective Objective-C 2.0》读书笔记(12)
- iOS之《Effective Objective-C 2.0》读书笔记(50)
- iOS之《Effective Objective-C 2.0》读书笔记(2)
- iOS之《Effective Objective-C 2.0》读书笔记(11)
- iOS之《Effective Objective-C 2.0》读书笔记(16)
- iOS之《Effective Objective-C 2.0》读书笔记(45)
- iOS之《Effective Objective-C 2.0》读书笔记(22)
- iOS之《Effective Objective-C 2.0》读书笔记(48)
- iOS之《Effective Objective-C 2.0》读书笔记(49)
- 编写高质量的iOS代码--Effective Objective-C 2.0 读书笔记
- 《Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法》--读书笔记
- iOS-Effective Objective-C 2.0 读书笔记(二)
- <<Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法>>读书笔记之objc_msgSend
- iOS之《Effective Objective-C 2.0》读书笔记(46)
- iOS之《Effective Objective-C 2.0》读书笔记(10)
- iOS之《Effective Objective-C 2.0》读书笔记(51)
- iOS之《Effective Objective-C 2.0》读书笔记(1)
- iOS-Effective Objective-C 2.0 读书笔记(三)
- iOS之《Effective Objective-C 2.0》读书笔记(6)