如果明确地实现了一个getter,那么仍然创建了ivar吗?

时间:2014-04-25 07:20:13

标签: ios objective-c properties

我正在尝试了解有关属性的所有方案,主要是在自动创建ivar时以及不自动创建时。请告诉我在以下情况下我是否正确:

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

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

  3. 基本上与方案2相同,除了这次是明确实现的setter。 ivar将自动生成,因为只要该属性的两个(getter或setter)中的一个明确实现,它就会自动生成。

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

1 个答案:

答案 0 :(得分:1)

您的所有陈述都是正确的(假设您没有明确提供@synthesize语句)。

参考:“使用Objective-C编程”文档中的"Encapsulating Data"

  

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

     

如果你还是   需要一个实例变量,你需要请求一个   合成:

@synthesize property = _property;