关于 Objective-C 中的私有实例变量

Posted

技术标签:

【中文标题】关于 Objective-C 中的私有实例变量【英文标题】:About private instance variables in Objective-C 【发布时间】:2010-10-17 08:28:09 【问题描述】:

在 xCode 3 中,我在一个类中定义了私有实例变量。当我直接访问客户端代码中的私有变量时,为什么编译器只显示警告而不是错误?代码仍然可以运行。警告说这可能是未来的一个硬错误。 “硬错误”是什么意思?谢谢。

【问题讨论】:

【参考方案1】:

好吧,硬错误意味着它将成为未来的错误而不是警告。至于为什么现在是警告,我不确定。我想出于同样的原因,当您尝试调用类中不存在的方法时,这也只是一个警告。

【讨论】:

由于 Objective-C 的动态特性,您可以调用类中不存在的方法。也就是说,无论编译器在编译时是否知道它,您都可以在运行时向类发送消息。 对,我只是想成员变量的工作方式可能相同(例如在 php 中)【参考方案2】:

硬错误意味着将来某个时候编译器会按照您期望的方式运行(即,当您直接访问定义的可见性范围之外的实例变量时,它不会编译源文件)。

现在编译器根本没有强制 Objective-C 的可见性限制。但是,该警告是为了提醒您正在做一些您不应该做的事情,并提醒您注意这一点,以防您不小心这样做了。

如果我不得不冒险猜测为什么不强制执行可见性,我会说在 Foundation 库和 CoreFoundation 库之间有所有免费的桥梁,可能有相当数量的库访问严格来说不应该可见的实例变量的代码。

一般来说,直接访问实例变量是个坏主意。只要您可以使用 Obj-C 2.0,如果您正在设计纯数据模型对象,最好使用属性之类的东西。

【讨论】:

以上是关于关于 Objective-C 中的私有实例变量的主要内容,如果未能解决你的问题,请参考以下文章

第8章 继承(Objective-C程序设计)

在 Objective-C 中定义私有变量的最佳方法

Objective-C 中的属性和实例变量

Objective-C 中的 switch 语句和实例变量分配

Objective-C 中的实例变量是不是默认设置为 nil?

为啥Java中的实例变量总是私有的?