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

标签 objective-c syntax 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];

最佳答案

所有这些都是正确的:

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;

不会。

在某些情况下了解这一点很有趣。

关于objective-c - 使用点语法或括号语法设置属性之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2207810/

相关文章:

ios - 在 iOS 9 上从 TableView 打开 safari View Controller 并在 iOS 8 或 7 上在 safari 中打开

iphone - 如何对单击的 ImageView 执行一些操作?

objective-c - 如何在框架中使用 Swift 扩展 Objective-C 类?

java - 如何在java中执行命令行.exe文件

python - 这个列表理解是如何工作的?

python - 是否有任何支持 Python 3 语法的 IDE?

objective-c - 以编程方式获取 iPhone 上的已用空间、可用空间

objective-c - 通过弱指针分配给 Block 中的 ivar

objective-c - @synchronized(self) 是否创建一个 block ,其中 self 前缀在属性上是不必要的?

objective-c - 为什么这个 UIView 在某些情况下没有被添加为 subview ,但在其他情况下却可以?