iOS 自定义Set方法,注意点

来源:互联网 发布:mac如何删除文件夹 编辑:程序博客网 时间:2024/05/21 22:40

之前一直以为set方法就是为了,让外部调用提供外部接口用的,不过在最近沃尔玛项目中,我发现我错了,我错得特别离谱,以至于不仔细看我都被蒙过去了。

首先我们明确一点set方法,如果我们不自定义set方法,那么我们属性会自动实现set和get方法而且注意而且会生成实例变量

like:@property(nonatomic,weak) Nsstring *name;

那么系统会自动生成_name的实例变量。

那如果我们自定义是实现了set方法的话,你就别想用_name了,你不许手动在扩展里面添加一个_name的实例变量,否则就休想使用,注意不会自动生成了!

所以 我当初遇到这样一段代码

在一个

- (void)setItemsList方法里面

得到:

self.brandList = brands;


而且我自定义类里面有自定义实现set方法

- (void)setBrandList:(NSArray *)brandList


通过断点跟踪,发现当代码运行到self.brandList = brands时候

会自动跳入- (void)setBrandList:(NSArray *)brandList方法

而- (void)setBrandList:(NSArray *)brandList这个方法里面有一个

    _brandList = brandList;

注意这个_brandlist就是作者自定义的一个实例变量。不是系统自己生成的。

所以依次来说总结两点:

1.自定义set方法之后,没有办法使用到实例变量,只能手动添加

2.在我们这个自定义类里面同样可以用set方法来对属性进行逻辑处理,而且可以不给外面使用,单单set方法就给自定义里面使用。(我这个重写set的属性就是没有给外部使用)


0 0