看完MJ讲解的单例后的个人总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了看完MJ讲解的单例后的个人总结相关的知识,希望对你有一定的参考价值。
1、单例的介绍
单例是ios常用的开发模式的一种。
2、什么是单例
单例就是一个类只创建一个对象,只分配一次内存空间。
3、单例的应用场景
1)系统的单例: [UIApplication sharedApplication];
2)应用中的单例:qq的背景图等
4、单例的注意事项
1)永远只分配一块内存来创建对象
2)提供一个类方法,返回内部唯一的一个对象(一个实例)
3)最好保证init方法也只初始化一次
5、单例的创建
1)重写分配内存方法
//重写分配内存的方法 + (instancetype)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t once_Token; dispatch_once(&once_Token, ^{ //保证只分配一次内存 _instance = [super allocWithZone:zone]; }); return _instance; }
2)创建类方法
//创建share方法 + (instancetype)sharePerson { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ //只被init一次 _instance = [[self alloc]init]; }); return _instance; }
3)重写init方法
- (instancetype)init { if (self = [super init]) { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ //赋值,初始化资源 }); } return self; }
6、单例的调用和输出结果
1)单例的调用
Person * mark = [Person sharePerson]; Person * mary = [[Person alloc]init]; NSLog(@"mark ---%p mary---- %p ",mark,mary);
2)单例的输出结果
2016-03-02 21:38:30.743 Single[2104:190961] mark ---0x7fe6325488e0 mary---- 0x7fe6325488e0
以上是关于看完MJ讲解的单例后的个人总结的主要内容,如果未能解决你的问题,请参考以下文章