在项目里看到同事使用类目方便的持久化用户信息,使用会很方便。
具体一点,登录以后返回的用户基本信息,大多数情况下都是需要存储的。
目前项目里,为NSObject添加了一个类目,.h文件中用@property声明属性,.m中用NSUserdefault重写getter和setter方法。看到这样的设计,使用起来很方便,object直接就可以点到。今天仔细研究了一下,发现一些问题。我在.h中@property声明了属性,在.m中同时重写setter和getter方法。用变量前加下划线去赋值和取值的时候报错了。经过一番折腾,最后从网上找到了解决问题的方法和原因。
解决办法就是注释的那行代码。
具体解释如下:因为@property声明的属性会自动给该属性生成setter和getter方法,当我们自己同时重写setter和getter方法的时候,系统就不会自动生成该属性的setter和getter方法了。自然不会生成下划线开头+变量名的变量了,所以是不会识别的;
补充:_变量名去取值访问的是内存,而self.变量名是发消息,使用的是getter。
iOS5之前(可能是这样,因为我没有接触过那个时代,只是从网上找到的资料显示),声明属性需要 :
1、在.h中@property 类型 变量名;
2、在.h中声明setter和getter方法;
3、在.m中@sythesize并实现setter和getter方法;
现在简化为@property(原子性,语义)类型 变量名;这样系统会自动的为你生成一个_变量名的一个变量,与setter和getter方法。