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

时间:2010-02-05 14:25:51

标签: objective-c syntax 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];

3 个答案:

答案 0 :(得分:5)

所有这一切都是正确的:

self.yellowViewController = yellcon_New;

并且

[self setYellowViewController:yellcon_New];

同样的工作。 我想添加一些有趣的东西:当你使用

yellowViewController = yellcon_New;

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

所以,如果你有

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

调用

self.yellowViewController = yellcon_New;

[self setYellowViewController:yellcon_New];

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

yellowViewController = yellcon_New;

不会。

在某些情况下知道这一点很有意思。

答案 1 :(得分:4)

是的,A和B行的工作方式相同

您可以使用@dynamic而不是@synthesize来检查此属性,并将NSLog消息放入setter方法的实现中。

答案 2 :(得分:1)

是。如果您对该属性使用@synthesize内容,则会为您创建-setYellowViewController:方法。