self.xxx与_xxx的区别

2016-08-01  本文已影响151人  337b94dc718f

self.xxx(属性)

属性定义如下,在头文件中定义则为公有属性,可以在其他文件中访问。在实现中定义则为私有,只能在.m文件中访问。
@property (nonatomic, copy) NSString *name;
属性可以使用点语法,如
self.name = @"pingping";
相当于调用实例方法,getter方法
NSString *name = self.name;
相当于调用实例方法,setter方法

_xxx (实例变量)

属性与实例变量的联系

从iOS5开始,当在头文件中声明一个属性后,如name,编译器会自动在实现文件中生成实例变量_name,而且不需要使用
@synthesize name = _name;
大部分情况下,_xxx或self.xxx达到的效果是一样的,但还是有部分情况需要特别注意。接着往下看。

踩过的坑

1.懒加载时,如果不使用self.xxx是无法调用getter方法的,所以此时懒加载根本没用上,你的指针都是nil的状态。
2.要是用copy修饰属性,当使用_xxx语法时,是直接操作的原对象地址,不会触发copy操作,若你赋值的对象被修改了,那么你的属性值也被修改了。
3.在初始化init以及dealloc的方法中,可以使用_xxx语法,但在其他情况
下使用self.xxx比较合理
4.在dealloc方法中,若要使用部分属性,最好使用_xxx方式,若是该属性是懒加载而你用点语法访问,会造成crash。

参考

iOS 中关于self.xxx和_xxx访问变量的区别
iOS之self.xxx与_xxx的区别

上一篇下一篇

猜你喜欢

热点阅读