如果显式实现了getter,那么ivar是否仍在创建中



我正在努力理解关于属性的所有场景,主要是在自动创建ivar时和不自动创建时。请告诉我在以下情况下是否正确:

  1. 属性是隐式读写的。如果声明了readwrite属性,并且getter和setter都是显式实现的,那么是否真的不会自动生成ivar?

  2. 假设声明了另一个读写属性,而这一次只显式实现了getter。ivar将自动生成,因为只要属性的两个(getter或setter)中的一个未显式实现,它就会自动生成。

  3. 基本上与场景2相同,只是这次是显式实现的setter。ivar将自动生成,因为只要属性的两个(getter或setter)中的一个未显式实现,它就会自动生成。

只是为了澄清一下,当创建ivar时,它是否总是前面有下划线"_"?

您的所有语句都是正确的(假设您没有显式提供@synthesis语句)。

参考:"用Objective-C编程"文档中的"封装数据":

注意:编译器将自动合成实例变量在所有同时合成至少一个访问者的情况下方法如果为readwrite同时实现getter和setter属性,或者readonly属性的getter,编译器将假设您正在控制属性实现并且不会自动合成实例变量。

如果你仍然需要一个实例变量,则需要请求合成:

@synthesize property = _property;

相关内容

最新更新