1、线程安全方式:
- 1)nonatomic atomic:使用atomic多线程原子性控制,atomic的原理给setter加上锁, getter不会加锁。OC在定义属性时有nonatomic和atomic两种选择
atomic:原子属性,为setter方法加锁(默认就是atomic)
nonatomic:非原子属性,不会为setter方法加锁
- 2)GCD实现单例
+ (instancetype)sharedDataTool
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instace = [[self alloc] init];
});
return _instace;
}
- 3)NSLock
_lock = [[NSLock alloc]init];
[_lock lock];
。。。
[_lock unlock];
- 4)互斥锁 @synchronized(锁对象)
锁定1份代码只用1把锁,用多把锁是无效的- 优点:能有效防止因多线程抢夺资源造成的数据安全问题
- 缺点:需要消耗大量的CPU资源
atomic 实现:
- (void)setName:(NSString *)name
{
@synchronized(self) {
if (_name != name) {
_name = name;
}
}
}
- (NSString *)name
{
@synchronized(self) {
return _name;
}
}