iOS 单列的创建和销毁
来源:互联网 发布:医疗软件项目 编辑:程序博客网 时间:2024/05/21 06:16
对于某些需求可能需要销毁单列:开始打算遍历单列的所有属性,重置为nil,那样似乎不太好。
先看下单列的创建:
static SMMapModelManager _mapModelManager;方法一:+(id)shareInstance{ @synchronized(self){ if(_mapModelManager == nil) _mapModelManager = [SMMapModelManager alloc] init]; } return _mapModelManager;}方法二:+(id)shareInstance{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ if(_mapModelManager == nil) _mapModelManager = [SMMapModelManager alloc] init]; }); return _mapModelManager;}以上两种方法都是线程安全的.不过苹果官方现在提倡方法二.//重写allocWithZone,里面实现跟方法一,方法二一致就行.+(id)allocWithZone:(struct _NSZone *)zone{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ if(_mapModelManager == nil) _mapModelManager = [SMMapModelManager alloc] init]; }); return _mapModelManager;}//保证copy时相同-(id)copyWithZone:(NSZone *)zone{ return _mapModelManager;}这样就是一个完整的单例,保证怎么创建都是唯一的.MRC下的创建 创建过程跟ARC下步骤一样.不过要处理一些内存管理的函数.//不需要计数器+1- (id)retain { return self;}//不需要. 堆区的对象才需要- (id)autorelease { return self;}//不需要- (oneway void)release {}//不需要计数器个数. 直接返回最大无符号整数- (NSUInteger)retainCount { return UINT_MAX; //参照常量区字符串的retainCount}
方法一:+(void)attemptDealloc{ [_mapModelManager release]; //mrc 需要释放,当然你就不能重写release的方法了. _mapModelManager = nil;}方法二:1. 必须把static dispatch_once_t onceToken; 这个拿到函数体外,成为全局的.2.+(void)attempDealloc{ onceToken = 0; // 只有置成0,GCD才会认为它从未执行过.它默认为0.这样才能保证下次再次调用shareInstance的时候,再次创建对象.// [_mapModelManager release]; _mapModelManager = nil;}
0 0
- iOS 单列的创建和销毁
- 索引的创建和销毁
- 视图的创建和销毁
- GDALDataset的创建和销毁
- session的创建和销毁
- Session的创建和销毁
- Session的创建和销毁
- Session 的创建和销毁
- IOS 单列标准创建方案
- iOS单例的创建与销毁
- iOS单列的实现
- java对象的创建和销毁
- MFC对话框的创建和销毁顺序
- UIViewController的创建和销毁流程
- 非模态窗口的创建和销毁
- SDL窗口的创建、显示和销毁
- 创建对象和销毁对象的原则
- CDialog 非模态对话框的创建和销毁
- 在PullToRefresh中设置头布局
- 提升mac下的开发效率
- uva 1354 Mobile Computing ——yhx
- IntelliJ - idea15.0.2 破解方法
- 用 Retrofit 2 简化 HTTP 请求
- iOS 单列的创建和销毁
- Mac OS X下安装配置MySQL数据库
- 从IaaS到PaaS,天云软件助力企业云化有底气!
- 将varchar修改为clob的方法
- uva 120 stacks of flapjacks ——yhx
- 稀疏矩阵
- 二分查找(折半查找) -- 已排序序列的查找算法
- uva 1605 building for UN ——yhx
- uva 1152 4 values whose sum is zero ——yhx