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