标签:
在多线程中,单例的实现也要考虑线程安全问题。
1.通过GCD dispatch_once来实现:
@property (nonatomic, strong) NSString *str;
- (NSString *)str { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ if (!_str) { _str = [[NSString alloc] init]; } }); return _str; }
当然这是在ARC情况下,如果是MRC情况下str被释放了,那么再访问str时会应用崩溃,被释放的内存,野指针,因为dispatch_once确实只执行一次。
而下面代码就不同了。
- (NSString *)str { if (!_str) { @synchronized(self) { if (!_str) { _str = [[NSString alloc] init]; } } } return _str; }
标签:
原文地址:http://www.cnblogs.com/hahahahahaha/p/5077341.html