需求概述:
在优化帅哥日语app的音乐播放功能时, 希望将 音乐/视频播放控制器做成单例模式,
当关闭播放界面的Controller时,音乐并不会停止播放;
当重新进入播放界面的Controller时,还在播放原来的歌曲,还是熟悉的韵味
效果如下:
具体实现:
第1步, 创建一个Singleton.php模板文件
打开XCode,在项目中新增一个Singleton.pch文件作为创建单例类的模板
第2步, 使用Singleton.php模板文件 实现单例播放器类
有了.pch模板文件之后, 创建任何单例控制器就非常的轻松了
在控制器.h,只需要这样一行代码:
控制器.m,只需要这样一行代码:
附录1: PCH文件创建和配置方法
1. 在Supporting Files下面,右键 New File, 选择 Other 里面的PCH File
2. 点击相应的TARGETS —>Build Setting ,搜索Prefix Header
3. 将Precompile Prefix Header 勾选为YES
4. 将左上角 项目的名字拷贝一下, 双击Prefix Header一栏, 填入:【项目的名字/Beyond.pch】
附录2: 在ARC环境下, 单例的实现思路
在app运行期间,全部共享同一份资源(这份资源只需要创建初始化1次即可),一般用于工具类。
例如:登陆控制器,网络数据请求,音乐播放器等一个工程需要使用多次的控制器或方法。
单例模式的特点
- 优点:
单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。
如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
单例模式因为类控制了实例化过程,所以类可以更加灵活修改实例化过程。
- 缺点:
单例对象一旦建立,对象指针是保存在静态区的,单例对象在堆中分配的内存空间,会在应用程序终止后才会被释放。
单例类无法继承,因此很难进行类的扩展。
单例不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。
未完待续,下一章节,つづく