IOS单例模式要做到3点

时间:2023-03-09 23:21:44
IOS单例模式要做到3点

1,永远只分配一块内存来创建对象。

+(instanst)

static id instace = nil;

static dispatch_once_t onceToken;

dispatch_once(&onceToken,^{

instance = [super allocWithZone:zone];

}) ;

return instance;

2,提供一个类方法,返回内部唯一的一个对象(一个实例)

3,最好保证 init也只初始化一次(也可以不写,写比较好点。);

对于MRC还要重写release和autorelease;

使得release 和autorelease不做操作。不然释放了内存就再也创建不了了。

-(id)autorelease

{   return self;

}

-(id)retrain

return self;

-(NSUInteger)retainCount

{

return 1;

}

+(id) copyWithZone:(struct _NSZone *)zone

{      return _instance;

}

-(oneway void)release

}oneway 表示分布式对象,也不知道什么意思。

ARC和MRC通用的写法;

利用宏#if ! __has_feature(objc_arc)     来判断是否不是ARC环境    这个是宏处理,如果是否,里面的代码根本就不会生成。

[objc release];

#endif