Objective c 可以直接在同一类的实例方法中访问实例变量来读取它们的值吗?

Objective c 可以直接在同一类的实例方法中访问实例变量来读取它们的值吗?,objective-c,Objective C,我有一个实例变量->mXYZ 我在很多地方都读到过这样的文章:最好有这些方法的访问器。 但是如果我只是在课堂上使用它们,而这也用于阅读 我知道要修改实例变量,我们应该始终使用setter,因为还有一些工作要做,比如释放被指向的旧对象和其他一些事情 但是getter只是简单地返回实例变量是什么,那么我有必要在类中使用getter来访问它吗 变量不能在类外访问。尽管getter通常只返回值可能是正确的,但它们的逻辑与setter相同。也就是说,getter可能正在做一些重要的额外工作,如果您试图直接

我有一个实例变量->mXYZ 我在很多地方都读到过这样的文章:最好有这些方法的访问器。 但是如果我只是在课堂上使用它们,而这也用于阅读

我知道要修改实例变量,我们应该始终使用setter,因为还有一些工作要做,比如释放被指向的旧对象和其他一些事情

但是getter只是简单地返回实例变量是什么,那么我有必要在类中使用getter来访问它吗


变量不能在类外访问。

尽管getter通常只返回值可能是正确的,但它们的逻辑与setter相同。也就是说,getter可能正在做一些重要的额外工作,如果您试图直接访问该变量,您可能会绕过这些工作


例如,类可能会延迟从磁盘或远程服务器加载其某些属性(即ivar值)的值,直到通过其getter访问其中一个属性。

如果类中有一个私有实例变量,则是直接访问它还是定义属性取决于:

  • 如何使用:是否需要管理(取消)分配,是否希望延迟创建,它是一个伪变量(例如,将temp存储在F中,但同时具有F和C属性)

  • 您使用的内存管理类型:手动(保留/释放)或自动(ARC或垃圾收集)

属性通常对基本类型变量没有什么好处,伪变量是一个明显的反例

在自动内存管理下,属性最常见的用途之一——本地化和处理保留/释放——被删除。但是,如果您需要在分配时复制语义,则属性比直接访问更好

在手动内存管理下,属性有一个明显的优势——内存管理是本地化的,并且使用该语言提供的
@synthesis
。然而,正如您所说,对于读取变量,直接访问通常是好的

总的来说,您知道自己的类以及使用的内存管理样式,因此可以为您的私有实例变量选择最佳解决方案。没有普遍的“正确”答案