Objective-C 单例、用户首选项(UserDefaults)、对象归档

本文介绍了Objective-C中单例的实现方式,包括何时使用单例,以及创建单例的步骤。同时,讲解了如何利用NSUserDefaults进行用户首选项的存取操作,指出NSUserDefaults本身就是一个单例。此外,还讨论了对象序列化的重要性,通过实现NSCoding协议实现对象的序列化和反序列化,以避免使用NSDictionary存储对象的不便。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(我刚才修改了一下这篇文章,因为我看了一下 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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值