首先,请注意最新版本的 Xcode 根本不再需要 @synthesize。您可以(并且应该)忽略它。也就是说,这就是这些部件的作用。
@property
是访问器的声明。这只是一个声明。以下内容之间几乎没有什么区别:
@property (nonatomic, readwrite, strong) NSString *something;
vs.
- (NSString *)something;
- (void)setSomething:(NSString)aSomething;
主要区别在于使用声明这些方法@property
让编译器自动为您生成(综合)实现。不需要让编译器为您做这件事。您完全可以自由实施something
and setSomething:
手工制作,这是很常见的事情。但是,如果你不手动实现它们,编译器会自动为你创建一个名为_something
并为 getter 和 setter 创建合理的实现。
在旧版本的 Xcode 中,您必须使用以下命令显式请求自动生成@synthesize
关键词。但现在不再需要这样了。今天,使用的唯一理由@synthesize
是如果你希望 ivar 有一个非标准名称(永远不要这样做)。
这里的一个关键点是方法something
and setSomething:
are 只是方法。它们并没有什么神奇之处。它们不是特殊的“属性方法”。它们只是按照惯例访问某个状态的方法。该状态通常存储在 ivar 中,但并非必须如此。
更清楚地说:object.something
does not意思是“返回名为的ivar_something
from object
.” 意思是“返回结果[object something]
,无论它做什么。”返回 ivar 的值是很常见的。
您应该使用以下方式声明您的所有状态(内部和外部)@property
声明,并且应该避免直接声明 ivars。您还应该始终通过其访问器访问您的属性(self.something
),除了在init
and dealloc
方法。在init
and dealloc
,你应该直接使用 ivar (_something
).