Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用点或括号语法设置属性之间有区别吗?_Objective C_Syntax_Declared Property - Fatal编程技术网

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

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

鉴于下面的属性声明,方法(A)的工作方式是否与方法(B)完全相同?我只想检查一下self.yellowViewController=yellcon\u New将通过我的setter执行,以便释放旧对象,保留新对象

// 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;