#单例的写法

我们知道,创建对象的步骤分为申请内存(alloc)、初始化(init)这两个步骤,我们要确保对象的唯一性,因此在第一步这个阶段我们就要拦截它。当我们调用alloc方法时,oc内部会调用allocWithZone这个方法来申请内存,我们覆写这个方法,然后在这个方法中调用shareInstance方法返回单例对象,这样就可以达到我们的目的。拷贝对象也是同样的原理,覆写copyWithZone方法,然后在这个方法中调用shareInstance方法返回单例对象。看代码吧:

#import "Singleton.h"  
  
@implementation Singleton  
  
static Singleton* _instance = nil;  
  
+(instancetype) shareInstance  
{  
    static dispatch_once_t onceToken ;  
    dispatch_once(&onceToken, ^{  
        _instance = [[super allocWithZone:NULL] init] ;  
    }) ;  
      
    return _instance ;  
}  
  
+(id) allocWithZone:(struct _NSZone *)zone  
{  
    return [Singleton shareInstance] ;  
}  
  
-(id) copyWithZone:(struct _NSZone *)zone  
{  
    return [Singleton shareInstance] ;  
}  
  
@end  
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios的单例模式有两种官方写法: 1)不使用GCD的方式 #import "Manager.h" static...
    zhaihongxia阅读 886评论 0 0
  • http://blog.sina.com.cn/s/blog_945590aa0102vxhb.html 可以看到...
    WeiHing阅读 12,632评论 1 10
  • 一 、OC中单例的写法:1.普通单例的写法 2. 利用多线程来写单例 #pragma mark --- 普通单例写...
    天涯海角我爱你阅读 1,814评论 0 3
  • 单例模式在面向对象的编程范式下还是非常有用的。举个例子,将服务化的思想引入前端,可以把一些公共逻辑以服务的模式提供...
    松哥888阅读 615评论 0 0
  • 【反省组】刘畅20180111“对立与决断”学习分享: 稻盛和夫先生善于团结他人,协同努力,有着善于鼓励的乐观的精...
    瑶瑶_8f95阅读 1,467评论 0 0