我注意到在Apple框架中的许多头文档文件中,直接在接口定义之后定义括号内的变量,如下面的变量a和b:
@interface MyView : UIView {
@package
int a;
UIView b;
}
通常我刚刚将所有变量声明为属性以方便合成方法。任何人都可以告诉我何时在@package而不是@properties下声明变量会更有效或更合适?
答案 0 :(得分:1)
@package
是一个访问说明符,类似于它在Java中的工作方式(它允许从同一包级别的任何代码进行访问)。但由于Objective C对象的.
语法适用于属性,而不是直接成员访问,因此您必须使用->
语法,就像对象是C结构一样,直接访问该变量
自动合成的@property
会创建一个 protected 实例变量(以下划线为前缀),由合成方法读取和设置。现在,与直接成员访问相比,使用属性的开销可以忽略不计,因此没有理由停止使用属性。
在您的示例中,如果您有MyView* myview
,则可以使用b
直接设置视图myview->b = someotherview;
。但是这会让类没有机会响应更新(您可能会编写setter方法以便您可以使用它),也不会确保提供的视图得到正确保留。这些是属性旨在避免的问题。