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)
所有这一切都是正确的:
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)
将不会.
在某些情况下知道这一点很有趣.