單例
寫一個方法
@interface test2 : NSObject<NSCopying>
+(instancetype)shareWithTest;
@end
方法的實現(xiàn)
static id stance = nil;
+(instancetype)shareWithTest{
return [[self alloc] init];
}
//調(diào)用系統(tǒng)的兩個方法
+(instancetype)allocWithZone:(struct _NSZone *)zone{
static dispatch_once_t once;
dispatch_once(&once, ^{
stance = [super allocWithZone:zone];
});
return stance;
}
//此處用id或者instancetype都可以,如果你寫的id系統(tǒng)會自動轉(zhuǎn)為instancetype
-(id)copyWithZone:(NSZone *)zone{
return self;
}
這樣就簡單實現(xiàn)了無論你是alloc init 還是 copy 還是shareWith等都是同一個對象,咱們可以通過打印他們的地址來查看:
test2 *t1 = [test2 shareWithTest];
test2 *t2 = [[test2 alloc] init];
test2 *t3 = [t2 copy];
NSLog(@"%@---%@---%@",t1,t2,t3);
//下圖就是打印的他們?nèi)齻€的地址
Snip20160524_1.png