? 單例模式的作用
可以保證程序運(yùn)行過(guò)程,一個(gè)類只用一個(gè)實(shí)例,而且該實(shí)例易于供外界訪問(wèn)
從而方便控制了實(shí)例個(gè)數(shù),并節(jié)約系統(tǒng)資源
單例模式使用場(chǎng)合
在整個(gè)應(yīng)用程序中,共享一份資源(這份資源只需要?jiǎng)?chuàng)建初始化1次)
代碼實(shí)現(xiàn)
創(chuàng)建一個(gè)類繼承與NSObject
類名為XMGPerson
-(void)viewDidLoad{
[super viewDidLoad];
XMGPerson *person1 = [[XMGPerson alloc]init];
person1.name = @"jack";
XMGPerson *person2 = [[XMGPerson alloc]init];
XMGPerson *person3 = [[XMGPerson alloc]init];
XMGPerson *person4 = [[XMGPerson alloc]init];
NSLog(@"%p %p %p %p",person1,person2,person3,person4);
NSLog(@"%@----------%@",[XMGPerson?sharedPerson],[XMGPerson sharedPerson]);
XMGPerson *p = [XMGPerson sharedPerson];
XMGPerson *p2? = [p copy];
NSLog(@"%p %p",p,p2);
}
在XMGPerson.m文件中
#import"XMGPerson"
@interface XMGPerson()<NSCopying>
@end
@implementation XMGPerson
static XMGPerson *person;
//外面調(diào)用alloc的時(shí)候保證是同一個(gè)對(duì)象
+(instancetype)allocWithZone:(struct _NSZone *)zone{
static dispatch_once_t onceToken;
dispatch_once(&onceToken,^{
person =?[super allocWithZone:zone];
});
return person
}
+(instancetype)sharedPerson{
static dispach_once_t onceToken;
dispatch_once(&onceToken,^{
person = [[self alloc]init];
});
return person;
}
-(id)copyWithZone:(NSZone *)zone{
return person;
}

在XMGPerson.h文件中
@property (nonatomic,strong) NSString *name;
+(instancetype )sharedPerson;