也许这是一个愚蠢的问题。我每次制作@property
时都必须@synthesize
。但是,使用@property(whatever) Type* property
可以做的唯一事情就是在实现文件中执行@synthesize property
。为什么两者都需要?为什么编译器不能自动生成getter / setter方法而不必编写@synthesize property
。
答案 0 :(得分:14)
在当前的生产编译器中,默认值 - 没有@synthesize
的情况 - 是什么都不做,然后警告是否未提供实现。
@synthesize
是自动的。
@dynamic
不是必需的。在运行时动态提供实现时使用@dynamic
。也就是说,如果您未提供@dynamic foo;
和@property <type> foo;
实施,则-foo
与-setFoo:
结合将导致编译器不发出警告。 / p>
请注意,您还可以使用@synthesize propertyName = instanceVariableName;
将特定的,名称不同的实例变量用作后备存储。
@property
非常适合getter / setter方法声明。它还携带更多元数据(保留,赋值等),编译器在@synthesize
期间利用这些元数据。
而且,与往常一样,atomic
属性对线程安全没有任何帮助。
答案 1 :(得分:2)
历史上,目前的编译器需要这样做。在XCode 4中,不再需要@synthesize(根据WWDC视频,希望我不违反NDA)......
答案 2 :(得分:1)
@synthesize
不是唯一的选择。 @dynamic property
也是可能的。
答案 3 :(得分:0)
@synthesize不是唯一的选择;还有@dynamic,这意味着你将自己实现这些方法。 [删除;有关详细信息,请参阅bbum的答案。]
答案 4 :(得分:0)
从Xcode 4.4开始,现在发生了这种情况。不再明确要求合成。