我注意到 @synthesize 指令允许对其接收的属性进行赋值,但我不明白为什么。
我的意思是,我在应用程序委托(delegate)的实现文件中有:
@synthesize window=_window;
如果我必须将属性合成到 View Controller 的 .m 文件中,我可以简单地写:
@synthesize messageString;
不为其分配 _messageString
。
我不明白为什么我需要前一种语法。
最佳答案
如前所述,这是将 ivar 设置为与访问器分开。因此,在上面的 window=_window 代码中,您的访问器将如下所示。
- (UIWindow *)window
{
return _window;
}
- (void)setWindow:(UIWindow *)w
{
[w retain];
[_window release];
_window = w;
}
将ivar 和属性分开的通常原因是为了防止在子类中发生冲突。这样,子类可以创建一个名为 window 的变量,而不会与父类(super class)“window”发生冲突,因为它实际上是 _window。
关于iphone - Objective-C:为什么@synthesize 预见到一个赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5714492/