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