iOS单例模式

简介:

下午帮同事改了一下午的代码,深深的被刺伤了,也深深的觉得代码架构的重要性,更深深的觉得应该好好的打磨一下设计模式。于是乎就钻研一下设计模式由易到难,先从iOS最简单的单例模式说起。

作为iOS最简单的设计模式—单例模式,主要的作用是:

  • 保证了一个类在项目中只有唯一的实例。
  • 节约了资源,减少不必要的开支。

怎样创建一个单例?

定义一个全局变量:

static Singleton * _instance =nil;

提供一个类方法接口,供外界调用:

+(instancetype)shareInstance
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    _instance =[[super allocWithZone:NULL]init];
    });
    return _instance;
}

重写系统调用方法

我们实例化对象的时候通常会通过alloc、init或者copy的方法,当我们调用alloc方法时,OC内部会调用allocWithZone这个方法来申请内存。拷贝对象也是同样的原理,OC内部调用copyWithZone方法,所以我们需要重写这两个方法,从而保证实例的单一性:

+(instancetype)allocWithZone:(struct _NSZone *)zone
{
      return [Singleton shareInstance];
}
-(instancetype)copyWithZone:(struct _NSZone *)zone
{
      return [Singleton shareInstance];
}

让我们调用一下:

    Singleton *obj1=[Singleton shareInstance];

    NSLog(@"obj1=%@",obj1);

    Singleton *obj2=[Singleton shareInstance];

    NSLog(@"obj2=%@",obj2);

    Singleton *obj3=[[Singleton alloc]init];

    NSLog(@"obj3=%@",obj3);

    Singleton *obj4=[[Singleton alloc]init];

    NSLog(@"obj4=%@",[obj4 copy]);

打印结果地址一致就大功告成:

2016-03-04 18:26:00.204  obj1=<Singleton: 0x7fd4a8406470>
2016-03-04 18:26:00.205  obj2=<Singleton: 0x7fd4a8406470>
2016-03-04 18:26:00.205  obj3=<Singleton: 0x7fd4a8406470>
2016-03-04 18:26:00.205  obj4=<Singleton: 0x7fd4a8406470>
目录
相关文章
|
安全 Java
单例模式(java&iOS)
O(∩_∩)O单例:意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类,单例模式是最简单的开发模式。
1058 0
|
iOS开发 安全 设计模式
|
iOS开发 设计模式 定位技术
|
iOS开发
IOS单例模式(Singleton)
<div id="cnblogs_post_body"> <p>单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。</p> <p><strong>1.单例模式的要点:</strong></p> <p><strong>  </strong>显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个
1311 0
|
iOS开发 设计模式
IOS设计模式单例模式
IOS单例模式是在一个程序中定义一个全局共享的实例变量
655 0
|
2月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
98 3