2

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

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

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

4

2 回答 2

4

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

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

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

  1. 例如,myObject 或它引用的任何东西在getting 的执行过程中是否发生了变化myStringProperty
  2. 例如,结果是否受当前时间影响?
于 2012-01-26T00:52:41.983 回答
2

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

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

于 2012-01-26T00:44:04.500 回答