什么时候在包中声明变量而不是属性?

时间:2014-06-10 17:10:59

标签: ios objective-c properties package

我注意到在Apple框架中的许多头文档文件中,直接在接口定义之后定义括号内的变量,如下面的变量a和b:


@interface MyView : UIView  {
  @package
  int a;
  UIView b;
}

通常我刚刚将所有变量声明为属性以方便合成方法。任何人都可以告诉我何时在@package而不是@properties下声明变量会更有效或更合适?

1 个答案:

答案 0 :(得分:1)

@package是一个访问说明符,类似于它在Java中的工作方式(它允许从同一包级别的任何代码进行访问)。但由于Objective C对象的.语法适用于属性,而不是直接成员访问,因此您必须使用->语法,就像对象是C结构一样,直接访问该变量

自动合成的@property会创建一个 protected 实例变量(以下划线为前缀),由合成方法读取和设置。现在,与直接成员访问相比,使用属性的开销可以忽略不计,因此没有理由停止使用属性。

在您的示例中,如果您有MyView* myview,则可以使用b直接设置视图myview->b = someotherview;。但是这会让类没有机会响应更新(您可能会编写setter方法以便您可以使用它),也不会确保提供的视图得到正确保留。这些是属性旨在避免的问题。