在以下示例中,有多少条消息发送到 myObject?

- (void) myMethod:(id) myObject
    NSLog(@"%@", myObject.myStringProperty);
    NSLog(@"%@", myObject.myStringProperty);
    NSLog(@"%@", myObject.myStringProperty);
}

我只是好奇 Objective-c 可能会缓存返回的值 myStringProperty 在堆栈上。返回的值 myStringProperty 连续消息之间可能会发生变化,因此缓存可能没有意义。

有帮助吗?

解决方案

我只是好奇 Objective-c 可能会在堆栈上缓存 myStringProperty 返回的值。myStringProperty 返回的值可能会在连续消息之间发生变化,因此缓存可能没有意义。

不,它没有被缓存。当然,每条 objc 消息都会发送 myObject 不是 nil.

编译器不知道方法执行中的任何副作用 (1) 或全局状态的影响 (2)。

  1. 例如myObject 或其引用的任何内容在执行 get 期间是否会发生变化 myStringProperty?
  2. 例如结果受当前时间影响吗?

其他提示

您可以在 -[myObject myStringProperty] 上设置断点并亲自查看。如果 myStringProperty 是您自己实现的 getter 方法,只需单击方法实现旁边的左侧装订线即可设置断点。

如果这是一个综合访问器方法,请将其作为符号断点输入 Xcode 的断点导航器中。单击导航器部分中的右箭头图标以选择断点导航器,按窗口底部的 +,然后选择“添加符号断点...”。在符号字段中键入 -[TheClassName myStringProperty],然后单击“完成”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top