在ARC模式下 单例
主要重写 两个方法
- (instancetype)allocWithZone:(struct _NSZone *)zone
- (id)copyWithZone:(NSZone *)zone
示例代码
@implementation Person
static id instance;
//重写allocWithZone分配内存的方法,保证该方法永远只会被执行一次
+(instancetype)allocWithZone:(struct _NSZone *)zone {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [super allocWithZone:zone];
});
return instance;
}
//自定义单列方法
+(instancetype)sharedPerson {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [Person new];
});
return instance;
}
//重写copyWithZone函数
-(id)copyWithZone:(NSZone *)zone {
return instance;
}
二 MRC下面还需要多加下面的几个方法
-(oneway void)release {}
-(instancetype)retain{
return instance;
}
-(NSUInteger)retainCount{
return 1;
}
-(instancetype)autorelease {
return instance;
}
网友评论