您的位置:首页 > 移动开发 > IOS开发

iOS中单例的线程安全

2015-07-28 19:23 302 查看
在多线程中,单例的实现也要考虑线程安全问题。

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: