【问题标题】:Basic message counting in Objective-cObjective-c 中的基本消息计数
【发布时间】:2012-02-19 05:14:39
【问题描述】:
在以下示例中,有多少条消息发送到myObject?
- (void) myMethod:(id) myObject
NSLog(@"%@", myObject.myStringProperty);
NSLog(@"%@", myObject.myStringProperty);
NSLog(@"%@", myObject.myStringProperty);
}
我只是对 Objective-c 可能会将 myStringProperty 返回的值缓存在堆栈上感到好奇。 myStringProperty 返回的值可能会在连续消息之间发生变化,因此缓存可能没有意义。
【问题讨论】:
标签:
objective-c
multithreading
caching
message
objc-message-send
【解决方案1】:
三个
我只是对 Objective-c 可能会将 myStringProperty 返回的值缓存在堆栈上感到好奇。 myStringProperty 返回的值可能会在连续消息之间发生变化,因此缓存可能没有意义。
不,它没有被缓存。每个 objc 消息都会发送,当然前提是 myObject 不是 nil。
编译器不知道方法执行中的任何副作用 (1) 或全局状态的影响 (2)。
- 例如在获取
myStringProperty 的执行过程中,myObject 或它引用的任何内容是否会发生变化?
- 例如结果是否受当前时间影响?
【解决方案2】:
您可以在 -[myObject myStringProperty] 上设置断点并自己查看。如果 myStringProperty 是您自己实现的 getter 方法,只需单击方法实现旁边的左侧装订线即可设置断点。
如果这是一个综合访问器方法,请将其作为符号断点输入 Xcode 的断点导航器中。单击导航器部分中的右箭头图标以选择断点导航器,按窗口底部的 +,然后选择“添加符号断点...”。在符号字段中输入 -[TheClassName myStringProperty],然后单击完成。