单例模式在设计模式中用得很多,也是在设计模式中比较简单的模式
实现单例模式有三个条件
1、类的构造方法是私有的
2、类提供一个类方法用于产生对象
3、类中有一个私有的自己对象
针对于这三个条件,OC中都是可以做到的
1、类的构造方法是私有的
我们只需要重写allocWithZone方法,让初始化操作只执行一次
2、类提供一个类方法产生对象
这个可以直接定义一个类方法
3、类中有一个私有的自己对象
我们可以在.m文件中定义一个属性即可
// main.m
// 单例模式
#import <Foundation/Foundation.h>
#import "SingleTon.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
SingleTon *s1=[SingleTon shareInstance];
SingleTon *s2=[SingleTon shareInstance];
NSLog(@"%@",s1);
NSLog(@"%@",s2);
}
return 0;
}
// SingleTon.h
// 单例模式
#import <Foundation/Foundation.h>
@interface SingleTon : NSObject
//提供一个类方法,用于产生对象的
+(SingleTon *)shareInstance;
@end
// SingleTon.m
// 单例模式
#import "SingleTon.h"
//保存一个全局的static变量
//不能让外部访问,同时放在静态快中的
static SingleTon *instance;
@implementation SingleTon
//获取单实例的类方法
+(SingleTon *)shareInstance
{
if (instance==nil) {
instance = [[SingleTon alloc] init];
}
return instance;
}
//限制方法,类只能初始化一次
//alloc的时候调用
+(id)allocWithZone:(struct _NSZone *)zone
{
if (instance==nil) {
instance =[super allocWithZone:zone];
}
return instance;
//拷贝方法:只能返回当前的单实例
//-(id)copyWithZone:(NSZone*)zone
//{
// return instance;
//}
//非ARC状态下
//1.需要重写release方法,不能让其引用+1
//-(id)retain
//{
// return self;
//}
//2.需要重写release方法,不能让其引用-1
//-(oneway void)resease
//{
// //do Nothing
//}
//
//-(id)autorelease
//{
// return self;
//}