我注意到@synthesize指令接受对其接收的属性的赋值,而我不明白为什么。

我的意思是,我在应用程序委托的实现文件中有:

@synthesize window=_window;


虽然如果我必须将属性综合到视图控制器的.m文件中,我可以简单地编写:

@synthesize messageString;


而不为其分配_messageString

我不知道为什么我需要以前的语法。

最佳答案

如前所述,这会将ivar设置为与访问器分开。因此,在上面的window = _window代码中,您的访问器将如下所示。

- (UIWindow *)window
{
     return _window;
}

- (void)setWindow:(UIWindow *)w
{
     [w retain];
     [_window release];
     _window = w;
}


分隔ivar和属性的通常原因是为了防止在子类中发生冲突。这样,子类可以创建一个名为window的变量,而不会与超类“ window”发生冲突,因为它实际上是_window。

关于iphone - Objective-C:为什么@synthesize可以预见任务?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5714492/

10-10 14:21