(我刚才修改了一下这篇文章,因为我看了一下 http://blog.youkuaiyun.com/developer_jiangqq 的文章之后 发现自己写错了 立马纠正)!!
关于单例,第一次真正的了解是在做Cocos2d-x的时候关于Director->getInstance()
关于在什么时候使用单例 这里举一个例子 比如在做用户登录这一块的时候 当用户成功填写用户名和密码之后 就应该将这些数据保存起来
为什么?我相信大家见过 当我们登录之后 会立即显示 欢迎您,XXX 而在其他页面想要用这些数据的时候可以直接使用 而不用再去构建一个新的对象 这就是单例的好处
而在OC中自己想创建一个单例是怎么的呢?正如(http://blog.youkuaiyun.com/developer_jiangqq)说的:
1:声明一个单例对象的静态实例,并初始化为nil
2:创建一个类的类方法,生成一个该类的实例,当且仅有这个类实例nil时,进行实例化
3:覆盖allocWithZone:方法,确保用户直接分配和初始化的事后,不会产生新的对象
4:实现NSCopying协议,覆盖release,autorelease,retain,retainCount方法,以此确保单例的状态
5:在多线程的环境中,注意要使用@synchronized关键字,确定静态实例被正确和初始化
关于static这个关键字 在OC中的我使用的却是很少,反正在.h中是不能用的 我们就简单理解为在内存唯一一份且不能修改的内存吧。
=========================存取和读取用户首选项===========================================
这里不多言了 主要就是构建一个NSUserDefaults的对象 这里的NSUserDefaults就是一个单例哦!!!
============================对象序列化==================================
对象序列化的原因在于将自己创建的对象放入文件,因为之前的将对象属性打包成NSDictionary的方式让我无比的讨厌(以前做java的同学肯定都懂)
要想是自己创建的对象可以序列化 必须要实现NSCoding协议并且实现以下两个方法 一个是序列化 一个是反序列化。
然后就可以使用NSKeyedArchiver来进行序列化和反序列化了 第一行代码是序列化过程 s 是一个自己新建的Student类对象。
第二行代码则是一个反序列化过程 存放路径的时候 请务必写在自己工程的目录下面 因为其他地方 咱们是没有办法写的 除了/tmp里面
这是OSX的沙盒原理 我也不懂 反正照做就OK