IOS单例模式要做到3点
2024-09-10 12:19:31
1,永远只分配一块内存来创建对象。
+(instanst)
static id instace = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken,^{
instance = [super allocWithZone:zone];
}) ;
return instance;
2,提供一个类方法,返回内部唯一的一个对象(一个实例)
3,最好保证 init也只初始化一次(也可以不写,写比较好点。);
对于MRC还要重写release和autorelease;
使得release 和autorelease不做操作。不然释放了内存就再也创建不了了。
-(id)autorelease
{ return self;
}
-(id)retrain
{
return self;
}
-(NSUInteger)retainCount
{
return 1;
}
+(id) copyWithZone:(struct _NSZone *)zone
{ return _instance;
}
-(oneway void)release
{
}oneway 表示分布式对象,也不知道什么意思。
ARC和MRC通用的写法;
利用宏#if ! __has_feature(objc_arc) 来判断是否不是ARC环境 这个是宏处理,如果是否,里面的代码根本就不会生成。
[objc release];
#endif
最新文章
- Linux screen 命令
- MySQL表分区技术
- Abstract Factory(抽象工厂)模式
- IREP_SOA Integration程序注释语法Annotations(概念)
- [原创]EnterpriseDB测试key申请方法
- emWin显示文本字符-【worldsing笔记】
- 内存单元按字节编址,地址0000A000H~0000BFFFH共有几个存储单元
- Highcharts 本地导出图片和PDF asp.net mvc版
- Hadoop SequenceFile
- poj2386
- Jenkins + Maven + Ansible + Tomcat 实现JAVA代码自动部署
- Python读取文件时输入文件绝对路径报错
- java传输文件的简单方法
- windows 下使用 sc 添加创建exe服务;
- linux的shadow文件
- fastjson的@JSONField注解
- Java并发编程(一)线程定义、状态和属性
- numpy笔记—np.squeeze用法
- vim使用案例
- mysql 5.6 每天凌晨12:00 重置sequence表中的某个值
热门文章
- JAVA为什么要配置环境变量,怎样配置
- Codeforces 723c [贪心][乱搞]
- 转:Android Webview 加载外部html时选择加载本地的js,css等资源文件
- java事件监听
- Flash插件地址
- The listener supports no services解决一例
- myeclipse自动排版
- oracle client与ODAC的字符集
- Egret和Http请求 (Ajax、XMLHttpRequest、Post、Get)
- windows下gethostbyname 调用失败