IOS学习之单例的实现
来源:互联网 发布:豌豆公主app数据 编辑:程序博客网 时间:2024/05/21 19:39
实现单例模型需要做三件事情
1.使用全局静态变量记录住第一个被实例化的对象
static Ticket *SharedInstance
2.重写allocWithZone方法,并使用dispatch_once_t,从而保证在多线程情况下,
同样只能实例化一个对象副本
+ (id)allocWithZone:(NSZone *)zone
{
// 解决多线程中,同样只能实例化出一个对象副本
staticdispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
SharedInstance = [superallocWithZone:zone];
});
returnSharedInstance;
}
3.建立一个以shared开头的类方法实例化单例对象,便于其他类调用,同时不容易引起歧义
同样用dispatch_once_t确保只有一个副本被建立
// 建立一个单例对象,便于其他类调用
+ (Ticket *)sharedTicket
{
staticdispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
SharedInstance = [[Ticketalloc]init];
});
returnSharedInstance;
}
关于被抢夺资源使用的注意事项:
在多线程应用中,所有被抢夺资源的属性需要设置为原子属性
系统会在多线程抢夺时,保证该属性有且仅有一个线程能够访问
注意:使用atomic属性,会降低系统性能,在开发多线程应用时,尽量不要资源
另外,atomic属性,必须与@synchronized(同步锁)一起使用
- IOS学习之单例的实现
- IOS 之 单例的实现
- iOS学习之单例
- ios学习--iphone单例模式(singleton)的实现
- ios学习--单例实现的几种方式
- iOS之 实现单例的步骤和具体实例:
- iOS 单例的实现
- ios 单例的实现
- IOS单例的实现
- ios单例的实现
- java学习之路--单例模式的实现
- iOS实现单例
- IOS单例实现
- iOS单例模式的实现
- iOS singleton单例模式的实现
- iOS单例模式的实现
- iOS单例模式的实现
- iOS单例模式的实现
- Hibernate3使用(二)Spring整合Hibernate,使用xml配置
- 富文本编辑器UMeditor在backbone中的使用
- Toast
- ActiveMQ简介
- Android UI设计:AlertDialog
- IOS学习之单例的实现
- hdu 1106 排序
- 小猪二手车 v4.1 安卓版
- 解决CSS中float:left后需要clear:both清空的繁琐步骤
- WINDOWS API学习笔记之创建线程
- C语言基础知识之(九):函数
- Linux内核工程导论——CGroup子系统
- 杭电 HDU ACM 1015 Safecracker (dfs 枚举排列)
- Activity的四种launchMode以及onNewIntent()的调用时机