单例模式的作用
可以保证程序运行过程,一个类只用一个实例,而且该实例易于供外界访问
从而方便控制了实例个数,并节约系统资源
单例模式使用场合
在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次)
代码实现
创建一个类继承与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;
//外面调用alloc的时候保证是同一个对象
+(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;