使用点或括号语法设置属性有区别吗?

fuz*_*oat 4 syntax objective-c declared-property

鉴于下面的属性声明,方法(A)的工作方式与方法(B)完全相同吗?我只想检查self.yellowViewController = yellcon_New;是通过我的setter进行的,以便释放旧对象并保留新对象.

// INTERFACE
@property(nonatomic, retain) YellowViewController *yellowViewController;

// IMPLEMENTATION (A)
self.yellowViewController = yellcon_New;

// IMPLEMENTATION (B)
[self setYellowViewController:yellcon_New];
Run Code Online (Sandbox Code Playgroud)

Jul*_*ien 5

所有这一切都是正确的:

self.yellowViewController = yellcon_New;
Run Code Online (Sandbox Code Playgroud)

[self setYellowViewController:yellcon_New];
Run Code Online (Sandbox Code Playgroud)

工作相同.我想添加一些有趣的东西:当你使用时

yellowViewController = yellcon_New;
Run Code Online (Sandbox Code Playgroud)

您可以直接将值与ivar相关联,而无需通过您的setter方法.

所以,如果你有

-(void)setYellowViewController:(YellowViewController*)theYellowViewController;
{
    NSLog(@"Setting the yellow view controller");
    [yourWife askFor:beer];
    ...whatever...
    ...set the yellowViewController (retain in your case)
}
Run Code Online (Sandbox Code Playgroud)

调用

self.yellowViewController = yellcon_New;
Run Code Online (Sandbox Code Playgroud)

[self setYellowViewController:yellcon_New];
Run Code Online (Sandbox Code Playgroud)

将使用setter方法(并记录消息,让你的妻子带给你一些啤酒)

yellowViewController = yellcon_New;
Run Code Online (Sandbox Code Playgroud)

将不会.

在某些情况下知道这一点很有趣.