0

我正在阅读这份文档来学习 Objective-C: https ://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html#//apple_ref/doc/uid/TP40011210- CH6-SW1

我的主题“使用类扩展隐藏私人信息”(pdf第73页)它说: Class extensions are often used to extend the public interface with additional private methods or properties for use within the implementation of the class itself. It’s common, for example, to define a property as readonly in the interface, but as readwrite in a class extension declared above the implementation, in order that the internal methods of the class can change the property value directly.

我在这个声明中不明白的是,由于我们可以在类扩展中定义的任何私有方法中更改只读属性,而无需在类扩展中将该属性重新声明为读写,那么通过将该属性重新声明为读写?

4

2 回答 2

0
  1. 实际上,我的假设“我们可以从类扩展中定义的任何私有方法中更改只读属性”是错误的。类扩展不能为给定的只读属性使用自动合成的实例变量,因为它们默认是私有的(不受保护)。
  2. 尽管我提到的文档说为给定属性自动合成的实例变量_Make前面有一个前导下划线 ()。这实际上不是真的(至少在 Xcode 4.6.3 中不是)。它具有相同的名称具有属性本身(除非您自己合成实例变量@synthesize Make = _Make; 如果我错了请纠正我
于 2013-07-24T19:29:25.237 回答
0

您始终可以通过其实例变量 ( _ivar = ...) 更改属性,但您将无法使用点属性语法 ( self.myProp =...) 更改它,除非您将其重新声明为readwrite. 您还需要提供其他信息,例如该物业是否属于strongweak在这种情况下。

于 2013-07-24T08:00:43.917 回答