单例的严谨写法

转载自//www.greatytc.com/p/85618bcd4fee?utm_source=tuicool&utm_medium=referral

感谢Jingege//www.greatytc.com/users/5dffd76b9caf


#import"Singleton.h"@implementationSingletonstaticSingleton* _instance = nil;

+(instancetype) shareInstance

{static dispatch_once_t onceToken ;

dispatch_once(&onceToken, ^{

_instance = [[superallocWithZone:NULL] init] ;

}) ;return_instance ;

}

+(id) allocWithZone:(struct _NSZone *)zone

{return[Singleton shareInstance] ;

}

-(id) copyWithZone:(struct _NSZone *)zone

{return[Singleton shareInstance] ;

}@end


我就问一个问题,如果我想销毁一个单列对象,需要怎么做?

喜欢(0)回复

Jingege@ysghome

1. 必须把static dispatch_once_t onceToken; 这个拿到函数体外,成为全局的.

2. +(void)attempDealloc{

onceToken = 0; // 只有置成0,GCD才会认为它从未执行过.它默认为0.这样才能保证下次再次调用shareInstance的时候,再次创建对象.

[_instance release];

_instance = nil;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在开发中经常会用到单例设计模式,目的就是为了在程序的整个生命周期内,只会创建一个类的实例对象,而且只要程序不被杀死...
    不要重名就好阅读 556评论 0 0
  • 在开发中经常会用到单例设计模式,目的就是为了在程序的整个生命周期内,只会创建一个类的实例对象,而且只要程序不被杀死...
    VincentHK阅读 685评论 0 3
  • 小笨憨阅读 220评论 0 0
  • 单例模式 什么是单例模式? 单例模式想一个大独裁者,他规定在他的国度里面,所有数据的访问和请求都得经过他,甚至你要...
    GitHubPorter阅读 1,190评论 0 4
  • 单例设计模式: - 1.就是在整个项目中,这个类的对象只能被初始化一次。拥有唯一的一个实例 - 2.这个唯一的...
    Hevin_Chen阅读 345评论 0 0