iOS自动@synthesize而不创建ivar

znq*_*znq 15 ios ivar

如果我有一个@property我不想通过ivar我支持的,我只是省略了@synthesize并且有手动的getter,它返回了一个计算值.

但是,现在自Xcode 4.4以来我没有指定@synthesizedo编译器会自动生成它.这是否意味着它还会生成一个ivar我不需要/使用它的偶数?

我最终可以通过使用强制不自动合成dynamic.然而,这将是错误的,因为@dynamic如果getter和setter在其他地方或运行时实现,则应该用于关闭警告.

Jef*_*mas 36

在我的工作中,我注意到以下行为.

  1. 如果你有一个readwrite属性,没有a @synthesize,有一个getter而且没有setter,那么它将生成iVar.
  2. 如果你有一个readwrite属性,没有a @synthesize,没有getter,并且有一个setter,那么它将生成iVar.
  3. 如果你有一个readwrite属性,没有a @synthesize并且同时拥有getter和setter,那么它将不会生成iVar.
  4. 如果你有一个readonly属性,没有a @synthesize和没有getter,那么它将生成iVar.
  5. 如果你有一个readonly属性,没有a @synthesize和getter,那么它将不会生成iVar.

从这一点来看,我认为一般规则是如果你没有a @synthesize,并且拥有完全实现该属性所需的所有方法,那么它被认为是动态的并且不生成iVar.

无论如何,如果你想确保没有生成iVar,那么将其声明为@dynamic.


关于@dynamic的澄清

来自Objective-C编程语言声明属性:

您可以使用@dynamic关键字告诉编译器您将通过直接提供方法实现或在运行时使用其他机制(如动态加载代码或动态方法解析)来履行属性隐含的API契约.

对我来说,即使您直接实现getter和setter,也可以将属性标记为@dynamic.