码迷,mamicode.com
首页 > 移动开发 > 详细

蓝懿 iOS 单例的线程安全

时间:2015-12-26 01:13:36      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

在多线程中,单例的实现也要考虑线程安全问题。

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;
}

 

蓝懿 iOS 单例的线程安全

标签:

原文地址:http://www.cnblogs.com/hahahahahaha/p/5077341.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!