单例

单例

写一个方法
@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

推荐阅读更多精彩内容