我正在尝试了解有关属性的所有方案,主要是在自动创建ivar时以及不自动创建时。请告诉我在以下情况下我是否正确:
属性是隐式readwrite。如果声明了readwrite属性,并且getter和setter 都显式实现,那么是否会自动生成没有ivar?
假设声明了另一个readwrite属性,这次只显式实现了getter。 ivar将自动生成,因为只要该属性的两个(getter或setter)中的一个不明确实现,它就会自动生成。
基本上与方案2相同,除了这次是明确实现的setter。 ivar将自动生成,因为只要该属性的两个(getter或setter)中的一个不明确实现,它就会自动生成。
只是为了澄清一下,当ivar被创建时,总是是否有前面的下划线" _"?
答案 0 :(得分:1)
您的所有陈述都是正确的(假设您没有明确提供@synthesize语句)。
参考:“使用Objective-C编程”文档中的"Encapsulating Data":
注意:编译器将自动合成一个实例变量 在所有情况下,它也合成至少一个访问者 方法。如果同时为
readwrite
实现getter和setter 编译器将属性或readonly
属性的getter 假设您正在控制属性实现 并且不会自动合成实例变量。如果你还是 需要一个实例变量,你需要请求一个 合成:
@synthesize property = _property;