ios-单例模式
来源:互联网 发布:小漠鞋子淘宝店 编辑:程序博客网 时间:2024/06/16 20:49
单例其实和C语言中的全局变量是差不多的。在整个程序的生命周期中只有一份内存,可以在多个程序中数据共享。最常见的单例写法其实就是
static Manger *manger=nil;+(Manger *)shardeManger{ if(manger==nil) { manger=[[[self class]alloc]init]; } return manger;}-(id)init{ self=[super init]; if(self) { } return self;}
如果在多线程中,在manger还是nil的时候有多个线程进行访问,比如说,一个线程在运行到shardeManger方法中的alloc那个位置,而另一个线程也调用到了那个位置,然后这个线程进行一次实例化,那个线程也进行了实例化,内存就会被覆盖,我们希望得到的关于那个单例的一些数据就不会那么的准确了。这个时候我们也是有解决办法的。就是加锁。
static Manger *manger=nil;+(Manger *)shardeManger{ @synchronized(self){ if(manger==nil) { manger=[[[self class]alloc]init]; }} return manger;}或者我们还可以用GCD的一个方法只执行一次。
+(Manger *)shardeManger{ static dispatch_once_t onceToken; dispatch_once(&onceToken,^{ manger =[[[self class]alloc]init]; }); return manger;}alloc会默认调用allocWithZone方法来分配内存空间,我们要单例设计的时候要重写allocwithzone的方法不然的话就可以调用allocwithzone这个方法又生成的一个单例
+(id)allocWithZone:(struct _NSZone *)zone { //里面的代码只会执行一次 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ manger =[super allocWithZone:zone]; }); return manger; }
阅读全文
0 0
- iOS单例模式
- iOS 单例模式
- IOS 单例模式
- iOS 单例模式
- IOS单例模式
- ios单例模式
- iOS 单例模式
- iOS 单例模式
- IOS单例模式
- iOS 单例模式
- iOS 单例模式
- IOS 单例模式
- IOS---单例模式
- iOS--单例模式
- iOS 单例模式
- ios 单例模式
- iOS 单例模式
- IOS单例模式
- 素数筛选_变形
- java之多线程内存模型分析
- uva10859放置街灯(树形dp)
- CSS 预处理器与 CSS 后处理器
- Android, IOS和QNX之比较
- ios-单例模式
- [POJ3737]UmBasketella
- 逆置单链表/求倒数第k个结点
- poj3301 Texas Trip (三分)
- Summing up Powers LightOJ
- javascript中常用的几种输出方式
- Vue2学习笔记:组件(Component)
- FZU 2261 浪里个浪 (多源最短路)(福州大学第十四届程序设计竞赛)
- java中函数问题Function