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

标签 ios objective-c properties package

我注意到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/

相关文章:

ios - 加载了 Nib 但未设置 View socket ,找不到 View socket 。

objective-c - 为什么 ARC 禁止调用未声明的方法?

ios - 使用分发临时设置配置文件时未收到推送通知

php - 此集合实例上不存在属性 [title]

c# - 是否可以将动态属性绑定(bind)到 WinForms 控件属性?

java - 将 Java 安全属性设置为 null

iphone - Facebook SSO 显示错误的语言

ios - 没有 '|' 候选产生预期的上下文结果类型 'NSTextStorageEditActions'

objective-c - 获取屏幕上某种颜色占据的区域 - iOS

iphone - PFQuery 排除特定列