请考虑以下代码:
@interface TestClass ()
@property NSString *privateProperty;
@end
现在,正如我所知,为了使编译器也创建访问器,我必须在@ implement-part中添加@synthesize指令。
但是,如果不添加指令,则以下消息有效:
[self setPrivateProperty:@"foo"];
从我的理解,这应该导致一个错误解释我,选择器是未知的。为什么这个二传手(我认为也是吸气剂)仍然存在?
答案 0 :(得分:2)
从xcode 4.5开始,所有属性都将自动合成。
答案 1 :(得分:1)
@property
声明声明了getter和setter方法的存在。 @synthesize
声明创建了这些方法的实现。
在Xcode 4.5之前,您已经收到编译器警告,因为省略了@synthesize
和运行时崩溃 - 两者都是由于您没有实现隐式声明的方法而导致的。
从Xcode 4.5开始,除非另外指定(@dynamic
),否则将自动合成方法的实现。
答案 2 :(得分:0)
这是最近版本的XCode中引入的一项新功能:它自动同步属性,创建一个_propertyName ivar来存储它。