#import "SuperMan.h" static SuperMan *superman = nil;// 定义全局静态变量 @implementation SuperMan // 重写alloc 方法封堵创建方法(调用alloc方法时 默认会走allocWithZone这个方法 所以只需封堵allocWithZone 方法即可) + (id)allocWithZone:(struct _NSZone *)zone { if (!superman) { superman = [super allocWithZone:zone];//如果没有实例让父类去创建一个 return superman; } return nil; } + (SuperMan *)shareSuperman //定义一个类方法进行访问(便利构造) { if (!superman) { superman = [[SuperMan alloc]init];// 如果实例不存在进行创建 } return superman; } - (id)retain //(非ARC有效)封堵retain 方法 单例不能被其他对象持有 { return self; } - (oneway void)release //(非ARC有效) 封堵release 方法 (让单例不被释放) { } - (NSUInteger)retainCount //(非ARC有效) { return NSUIntegerMax; } // 封堵深复制 (copy 和 mutablecopy 都可以实现深复制 但他们最终都需要调用copyWithZone方法所以直接封堵它) - (id)copyWithZone:(struct _NSZone *)zone { return self; } @end
原文地址:http://blog.csdn.net/mr_rog/article/details/41282657