单例模式是我常用的一种设计模式,最常见的用途就是用来保存数据并且传递数据。这都归功于单例模式的特性,首先就让我为大家简单介绍一下单例模式的特性。
单例模式的三大特性:
1.某个类只能有一个实例;
2.它必须自行创建这个实例;
3.它必须自行向整个系统提供这个实例。
具体代码如下:
mySingleton.h
#import <Foundation/Foundation.h>
@interface mySingleton : NSObject
+(mySingleton*)sharedInstance;
@end
mySingleton.m
#import "mySingleton.h"
static mySingleton *myst=nil;
@implementation mySingleton
+(mySingleton*)sharedInstance{
if (myst==nil) {
static dispatch_once_t once;
dispatch_once(&once, ^{
myst=[[super allocWithZone:NULL]init];
});
}
return myst;
}
+(id)allocWithZone:(struct _NSZone *)zone{
return [mySingleton sharedInstance];
}
-(id) copy{
return [mySingleton sharedInstance] ;
}
@end
创建的这个mySingleton类中有一个用static修饰的myst全局实例,该实例就是单例
实现方法:
- (void)viewDidLoad {
[super viewDidLoad];
mySingleton *s1=[mySingleton sharedInstance];
mySingleton *s2=[[mySingleton alloc]init];
mySingleton *s3=[s1 copy];
NSLog(@"s1=%@",s1);
NSLog(@"s2=%@",s2);
NSLog(@"s3=%@",s3);
}
运行结果:
s1=<mySingleton: 0x7fbea8e05d70>
s2=<mySingleton: 0x7fbea8e05d70>
s3=<mySingleton: 0x7fbea8e05d70>
运行结果显示,3个不同方法产生的对象的地址是相同的。