iOS开发 - 单例&线程锁

来源:互联网 发布:ubuntu系统可以干什么 编辑:程序博客网 时间:2024/05/15 04:37

//加锁之后 同一时刻 只允许一个线程访问
//数据修改前 加锁
[self.lock lock];
num–;
NSLog(@”%@ num = %d”,[NSThread currentThread].name,num);
[NSThread sleepForTimeInterval:0.5];
if(num == 0){
break;
}
//数据修改后 解锁
[self.lock unlock];

加锁单例

@implementation Single
//全局静态变量
static Single * single;

+(instancetype)shareSingle{

//加锁 同一时刻只允许一个线程访问@synchronized(self){    if (!single) {        single = [[Single alloc] init];    }}//GCD加锁 dispatch_once_t只会执行一次static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{    single = [[Single alloc] init];});return single;

}
//重写这个方法 可以让我们用alloc创建的对象也是同一份对象
+(instancetype)allocWithZone:(struct _NSZone *)zone{

static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{    single = [super allocWithZone:zone];});return single;

}

//copy的对象也是同一个对象
-(id)copyWithZone:(NSZone *)zone{

return single;

}

1 0