单例

单例

写一个方法
@interface test2 : NSObject<NSCopying>
+(instancetype)shareWithTest;
@end
方法的实现
static id stance = nil;
+(instancetype)shareWithTest{
return  [[self alloc] init];
}
//调用系统的两个方法
+(instancetype)allocWithZone:(struct _NSZone *)zone{
static dispatch_once_t once;
dispatch_once(&once, ^{
    stance = [super allocWithZone:zone];
});
return stance;
}
//此处用id或者instancetype都可以,如果你写的id系统会自动转为instancetype
-(id)copyWithZone:(NSZone *)zone{ 
return self;
}
这样就简单实现了无论你是alloc init 还是 copy 还是shareWith等都是同一个对象,咱们可以通过打印他们的地址来查看:
 test2 *t1 = [test2 shareWithTest];

test2 *t2 = [[test2 alloc] init];

test2 *t3 = [t2 copy];

NSLog(@"%@---%@---%@",t1,t2,t3);
//下图就是打印的他们三个的地址
Snip20160524_1.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容