iOS自动@synthesize而不创建ivar

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

但是,现在自从Xcode 4.4如果我没有指定@synthesize,编译器会自动生成它。这是否意味着即使我不需要/使用它也会产生一个ivar?

我最终可能强制不要使用动态自动合成。但是这是错误的,因为如果是getter and setter are implemented somewhere else or during runtime,应该使用@dynamic来关闭警告。

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

>如果你有一个readwrite属性,没有@synthesize,有一个getter,没有setter,那么它会生成iVar。
>如果你有一个readwrite属性,没有一个@synthesize,没有一个getter,并且有一个setter,那么它会生成iVar。
>如果你有一个readwrite属性,没有一个@synthesize并且同时具有一个getter和一个setter,那么它不会生成iVar。
>如果你有一个只读属性,没有一个@synthesize,没有一个getter,那么它会生成iVar。
>如果你有一个只读属性,没有一个@synthesize并有一个getter,那么它不会生成iVar。

从这个,我认为一般规则是,如果你没有一个@synthesize,并且具有完全实现该属性所需的所有方法,那么它被假定为动态的,不会生成iVar。

无论如何,如果要确保不生成iVar,则将其声明为@dynamic。

澄清@dynamic

The Objective-C Programming Language The Objective-C Programming Language

You use the @dynamic keyword to tell the compiler that you will fulfill the API contract implied by a property either by providing method implementations directly or at runtime using other mechanisms such as dynamic loading of code or dynamic method resolution.

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

翻译自:https://stackoverflow.com/questions/12933785/ios-automatic-synthesize-without-creating-an-ivar

转载注明原文:iOS自动@synthesize而不创建ivar