Objective c 在类扩展中重新声明只读属性
我阅读本文件是为了学习objective-C: 我在主题“使用类扩展隐藏私人信息”(pdf第73页)中提到:Objective c 在类扩展中重新声明只读属性,objective-c,objective-c-category,Objective C,Objective C Category,我阅读本文件是为了学习objective-C: 我在主题“使用类扩展隐藏私人信息”(pdf第73页)中提到: 类扩展通常用于使用附加的私有方法或属性来扩展公共接口,以便在类本身的实现中使用。例如,通常在接口中将属性定义为只读,但在实现上方声明的类扩展中将属性定义为读写,以便类的内部方法可以直接更改属性值。 我在这条语句中不理解的是,因为我们可以在类扩展中定义的任何私有方法中更改readonly属性,而不必在类扩展中将该属性重新声明为readwrite,通过将该属性重新声明为readwrite,它
类扩展通常用于使用附加的私有方法或属性来扩展公共接口,以便在类本身的实现中使用。例如,通常在接口中将属性定义为只读,但在实现上方声明的类扩展中将属性定义为读写,以便类的内部方法可以直接更改属性值。
我在这条语句中不理解的是,因为我们可以在类扩展中定义的任何私有方法中更改readonly属性,而不必在类扩展中将该属性重新声明为readwrite,通过将该属性重新声明为readwrite,它实现了什么?您始终可以通过其实例变量(
\u ivar=…
)更改该属性,但除非您将其重新声明为readwrite
,否则无法使用点属性语法(self.myProp=…
)更改它。您还需要提供其他信息,例如在这种情况下,属性是strong
还是weak
\u Make
)。事实并非如此(至少在Xcode 4.6.3中并非如此)。它具有相同的名称并具有属性本身(除非您合成实例变量本身@synthesis Make=\u Make;
如果我错了,请纠正我我有一个类似于
@property(readonly)NSString*Make;
的属性,我可以通过这个实例方法简单地更改它:-(void)setMyMake:(NSString*)myMake{Make=myMake;}
。我甚至不需要\u ivar
。那么为什么我不能在所有私有类扩展方法中始终使用Make=myMake;
?为什么我需要做self.Make=myMake;
?我也不确定\u Make=myMake;
为什么说\u Make
是一个未声明的标识符。我正在合成Make
pro通过使用self.myvar=newvar,您使用的是自动生成的代码,它还会自动处理所有内存管理人员,尤其是在设置新值时,这些人员会被考虑在内。此外,它是一个未声明的标识符,因为您可能没有使用扩展重新声明为readwrite(只是猜测而已)。