单例模式的概念:保证某个类只有一个实例,并且自行实例化并向整个系统提供这个实例。
IOS中的单例模式 在objective-c中要实现一个单例类,至少需要做以下四个步骤:
1、为单例对象实现一个静态实例,并初始化,然后设置成nil,
2、实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例,
3、重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,
4、适当实现allocWitheZone,copyWithZone,release和autorelease。
//.h文件
#import <Foundation/Foundation.h>
@interface Singleton :NSObject
//单例方法
+(instancetype)sharedSingleton;
@end
//.m文件
#import \”Singleton.h\”
@implementation Singleton
//全局变量
staticid _instance = nil;
+(instancetype)sharedSingleton{
return [[selfalloc]init];
}
////alloc会调用allocWithZone:
+(instancetype)allocWithZone:(struct_NSZone *)zone{
//只进行一次
staticdispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [superallocWithZone:zone];
});
return_instance;
}
-(instancetype)init
{
staticdispatch_once_t onceToken;
dispatch_once(&onceToken,^{
_instance = [superinit];
});
return_instance;
}
-(id)copyWithZone:(NSZone *)zone
{
return_instance;
}
- 测试代码及结果
[/code]
#import <UIKit/UIKit.h>
#import \”Singleton.h\”
int main(int argc,char * argv[]) {
@autoreleasepool {
Singleton *s1 = [[Singletonalloc]init];
Singleton *s2 = [SingletonsharedSingleton];
Singleton *s3 = [[Singletonalloc]init];
Singleton *s4 = [SingletonsharedSingleton];
Singleton *s5 =[s4copy];
NSLog(@\”%p,%p,%p,%p,%p\”,s1,s2,s3,s4,s5);
}
}
运行结果
[/code]
2016-07-14 16:18:45.110 单例模式[1377:86740] 0x7ff0c1c29f40,0x7ff0c1c29f40,0x7ff0c1c29f40,0x7ff0c1c29f40,0x7ff0c1c29f40
- 点赞
- 收藏
- 分享
- 文章举报
Cassiel社长发布了1 篇原创文章 · 获赞 0 · 访问量 195私信关注