但是,现在自从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。
相关文章
- ios - 有没有办法创建NSDecimal而不使用NSNumber并创建自动释放的对象?
- ios - 为什么不在Xcode 6中自动创建ProjectName-Prefix.pch?
- ios - Xcode不自动创建桥接头?
- python - Pandas:创建数据帧而不按字母顺序自动排序列名
- ios - 在返回之前发布的ARC弱ivar - 在构建发布时,而不是调试
- java - 当您创建ArrayList而不指定对象类型时,是否在添加第一个对象时自动创建它?
- ios - Sprite Kit SKShapeNode创建两个节点而不是一个节点
- 创建Apple Push服务而不是Apple生产iOS推送服务
转载注明原文:iOS自动@synthesize而不创建ivar - 代码日志