4

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

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

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

// IMPLEMENTATION (B)
[self setYellowViewController:yellcon_New];
4

3 回答 3

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;

将不会。

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

于 2010-02-05T18:03:06.483 回答
4

是的,A 线和 B 线的工作原理相同

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

于 2010-02-05T14:27:22.597 回答
1

是的。如果您将这个@synthesize东西用于该属性,它会-setYellowViewController:为您创建一个方法。

于 2010-02-05T14:28:08.037 回答