Objective c 使用点或括号语法设置属性之间有区别吗?
鉴于下面的属性声明,方法(A)的工作方式是否与方法(B)完全相同?我只想检查一下self.yellowViewController=yellcon\u New代码>将通过我的setter执行,以便释放旧对象,保留新对象Objective c 使用点或括号语法设置属性之间有区别吗?,objective-c,syntax,declared-property,Objective C,Syntax,Declared Property,鉴于下面的属性声明,方法(A)的工作方式是否与方法(B)完全相同?我只想检查一下self.yellowViewController=yellcon\u New将通过我的setter执行,以便释放旧对象,保留新对象 // INTERFACE @property(nonatomic, retain) YellowViewController *yellowViewController; // IMPLEMENTATION (A) self.yellowViewController = yellco
// INTERFACE
@property(nonatomic, retain) YellowViewController *yellowViewController;
// IMPLEMENTATION (A)
self.yellowViewController = yellcon_New;
// IMPLEMENTATION (B)
[self setYellowViewController:yellcon_New];
是的,A线和B线工作原理相同
您可以使用@dynamic而不是@synthesis来检查此属性,并将NSLog消息放入setter方法的实现中。是。如果您正在为该属性使用
@synthesis
方法,它将为您创建一个-setYellowViewController:
方法。所有这些都是正确的:
self.yellowViewController = 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;
及
将使用setter方法(并记录消息,让您的妻子给您带来一些啤酒)
但是
不会
在某些情况下了解这一点很有趣。不需要@dynamic。如果实现了setter方法,编译器将不会生成setter…这一点很重要,因为如果需要自定义setter,您可以使用它来生成getter,反之亦然。为了调试目的,它还可以快速地将日志添加到某个访问器中,而无需更改太多代码。
self.yellowViewController = yellcon_New;
[self setYellowViewController:yellcon_New];
yellowViewController = yellcon_New;