本帖最后由 cnchenys 于 2014-4-26 20:33 编辑
单例设计模式(singleton)就是不管你创建多少个对象,都指向同一块内存.即整个程序运行中,该对象只有一份.一般重量级(占用大量内存)而且仅需一份的对象,都会用单例设计模式设计.JAVA中也有单例设计模式,JAVA种只要private构造方法,再写一个instance方法,判断是否已存在,不存在则new. OC种也类似,单还要考虑计数器,所以OC种稍微麻烦点:
完成思路是提供一个实例化方法,
+ (Single *)instance{
@synchronized(self){ // 线程安全 if(!instance){
/* 这里不是使用alloc,而是调用[[super allocWithZone:NULL] init ] ,为什么是super而不是self呢? 这是因为已经在self中冲在了基本对的分配方法,所以需要借用父类的(NSobject)的功能帮助处理底层内存分配的杂务; */ instance = [[super allocWithZone:NULL] init]; } } return instance; }
并重写NSObject种的一些方法:
/ 覆盖NSObject方法 + (id)allocWithZone: (struct _NSZone * )zone{
return [[self instance] retain]; }
- (id)copyWithZone: (NSZone * )zone{ return self; }
- (id)retain{ return self; }
- (NSUInteger)retainCount{ return UINT_MAX; // 无穷大的数,表示不能释放 }
- (id)autorelease{ return self; }
- (oneway void)release{
}
|