Objective-C访问器也可以在没有@synthesize的情况下使用

时间:2012-12-23 17:42:33

标签: objective-c setter getter synthesize

请考虑以下代码:

@interface TestClass ()

@property NSString *privateProperty;

@end

现在,正如我所知,为了使编译器也创建访问器,我必须在@ implement-part中添加@synthesize指令。

但是,如果不添加指令,则以下消息有效:

[self setPrivateProperty:@"foo"];

从我的理解,这应该导致一个错误解释我,选择器是未知的。为什么这个二传手(我认为也是吸气剂)仍然存在?

3 个答案:

答案 0 :(得分:2)

从xcode 4.5开始,所有属性都将自动合成。

答案 1 :(得分:1)

@property声明声明了getter和setter方法的存在。 @synthesize声明创建了这些方法的实现。

在Xcode 4.5之前,您已经收到编译器警告,因为省略了@synthesize和运行时崩溃 - 两者都是由于您没有实现隐式声明的方法而导致的。

从Xcode 4.5开始,除非另外指定(@dynamic),否则将自动合成方法的实现。

答案 2 :(得分:0)

这是最近版本的XCode中引入的一项新功能:它自动同步属性,创建一个_propertyName ivar来存储它。