为什么不自动合成属性

gyo*_*dor 4 properties objective-c

也许这是一个愚蠢的问题.每次我做一个@property我必须这样@synthesize做.但这没有任何意义,你可以做的唯一事情@property(whatever) Type* property就是@synthesize property在实现文件中做.为什么两者都需要?为什么编译器在没有必须编写的情况下自动生成getter/setter方法@synthesize property.

bbu*_*bum 14

在当前的生产编译器中,默认情况 - 没有的情况@synthesize- 是什么都不做,然后警告是否未提供实现.

@synthesize 在最新版本的LLVM 2.0编译器中是自动的.

@dynamic 在自己实现setter/getter时不需要. @dynamic在运行时动态提供实现时使用.也就是说,如果你不提供和实现,@dynamic foo;结合@property <type> foo;将导致编译器不发出警告.-foo-setFoo:

请注意,您还@synthesize propertyName = instanceVariableName;可以使用特定的,命名不同的实例变量作为后备存储.

@property在接口中,getter/setter方法声明很简单.它还携带更多元数据(保留,分配等),这些元数据在编译期间被利用@synthesize.

并且,与往常一样,atomic属性并不能真正帮助线程安全.