Objective-C-如何选择@property-和-Instance-Variable(iVar)
简述
在Objective-C的类中,有两种方式可以声明变量
- @property:
// 在 .h文件 @interface Hello : NSObject @property (nonatomic, strong) UIView *view; @end
或者
// 在 .m文件 @interface Hello() @property (nonatomic, strong) UIView *view; @end
- 实例变量 Instance Variable (iVar):
//在 .h文件里 @interface Hello () { UIView *_view; } @end
或者
//在 .m文件 的interface里 @interface Hello () { UIView *_view; } @end
或者
//在 .m文件 的implement里 @implement Hello { UIView *_view; } @end
什么时候用@property, 什么时候用 iVar呢?
区别
可见性
如果想要定义私有(private)变量, 可以考虑使用iVar; 定义公开(public)变量,则使用@property;
iVar虽然可以用 @private
, @protected
和 @public
修饰, 但只会对影响到子类的可见性.也就是说,即使你用 @public
修饰iVar, 其它类也是无法访问到该变量的.
属性(attributes)
@property 可以使用strong, weak, nonatomic, readonly 等属性进行修饰.
iVar默认都是strong.
书写习惯
通常, iVar名称使用下划线开头, 如 _view, _height, _width.
但这并非强制要求.
getter/setter
编译器自动为@property生成访问器(getter/setter).
效率
iVar 运行效率更高.
结论
如果只是在类的内部访问, 既不需要weak、retain等修饰词,也不需要编译器自动生成getter/setter方法, 则使用 variable就可以.否则就使用 @property.
相关推荐
fort0 2020-05-16
81570790 2020-04-16
86540698 2020-04-08
zhoutaifeng 2020-03-07
好好学习天天 2020-03-06
InterestSoul 2020-02-17
82467413 2019-12-31
84407518 2012-07-16
81570790 2013-07-01
83254851 2013-08-29
84334052 2019-11-19
86540698 2019-11-19
84467715 2011-07-25
81731290 2014-03-22
85437811 2014-03-22
dahuichen 2019-10-25
ObjectiveC 2011-09-20
80530297 2015-04-14
80530297 2015-04-20