iOS开发多线程篇—单例模式(ARC)java
1、简单说明:ios
设计模式:多年软件开发,总结出来的一套经验、方法和工具设计模式
java中有23种设计模式,在ios中最经常使用的是单例模式和代理模式。安全
2、单例模式说明ruby
(1)单例模式的做用 :能够保证在程序运行过程,一个类只有一个实例,并且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源。多线程
(2)单例模式的使用场合:在整个应用程序中,共享一份资源(这份资源只须要建立初始化1次),应该让这个类建立出来的对象永远只有一个。工具
(3)单例模式在ARC\MRC环境下的写法有所不一样,须要编写2套不一样的代码spa
能够用宏判断是否为ARC环境线程

(4)在ARC中,单例模式的实现思路设计
在.m中保留一个全局的static的实例 static id _instance;
1)重写allocWithZone:方法,在这里建立惟一的实例(注意线程安全)

2)提供1个类方法让外界访问惟一的实例

3)实现copyWithZone:方法

(5)非ARC中(MRC),单例模式的实现(比ARC多了几个步骤)
实现内存管理方法
- (id)retain { return self; }
- (NSUInteger)retainCount { return 1; }
- (oneway void)release {}
- (id)autorelease { return self; }
3、单例模式(ARC)
1.说明
重写allocWithzone:方法,控制内存分配。由于alloc内部会调用该方法,每次调用allocWithzone:方法,系统都会建立一块新的内存空间。
alloc方法中:永远只分配一次内存
init方法中:保证全部的MP3数据都只加载一次。
2.代码示例
建立一个音频工具类,继承子NSObject类。
在该类中实现如下代码,观察:

在主控制器中,建立工具类对象:

打印结果:
说明:在alloc内部会调用更底层的方法allocWithZone方法分配内存空间,上面的代码建立了四个不一样的对象。
3.单例模式:设计思路
(1)永远只分配一块内存来建立对象
(2)提供一个类方法,返回内部惟一的一个变量
(3)最好保证init方法也只初始化一次
代码示例:
建立一个音频工具类,继承子NSObject类。
在该类中按照设计思路实现如下代码:
YYAudioTool.m文件


YYAudioTool.h文件

主控制器中建立对象:
观察打印结果:
说明:整个程序中只建立一个对象实例。
4.static补充:
注意:static id instace=nil;和static id instace;instace=nil;的区别