[英]ARC: what's the difference between a member variable and property?
我有一个在我的UIViewController中使用的NSArray对象。 我可以将其声明为ivar或属性。 两种方法都有什么优势(考虑到我使用的是ARC)?
选项1:
@interface MyViewController {
NSArray *_myArray;
}
@end
选项2:
@interface MyViewController
@property (strong, nonatomic) NSArray *myArray;
@end
属性和ivars在概念上完全不同。
属性代表代码的逻辑组成部分。 它可能但不需要由ivar支持。 它可以在运行时
动态生成
计算(如视图的-frame
),等等。
ivar是保存一些数据的实际分配的内存块。
如果正确使用属性,则开箱即用即可获得不错的功能,例如KVC / KVO合规性。 由于这个和其他原因,通常认为是一种好习惯,尤其是在现代运行时,以属性的形式声明所有公共接口,并在适当时在内部使用ivars(经常使用@synthesize
)对其进行支持。
就个人而言,我也喜欢将属性用于私有数据,既可以方便以后在需要时公开(只需将声明移到标头!),也可以轻松提供属性(和setter /变数),而不是依赖简单的ivar。
自从您提到ARC以来,我还没有使用太多(但是),但是我认为只要您正确地声明了属性,它就不会有太大的不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.