鉴于下面的属性声明,方法(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];
答案 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:
方法。