Objective-c 中的基本消息计数
-
14-11-2019 - |
题
在以下示例中,有多少条消息发送到 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)。
- 例如myObject 或其引用的任何内容在执行 get 期间是否会发生变化
myStringProperty
? - 例如结果受当前时间影响吗?
其他提示
您可以在 -[myObject myStringProperty] 上设置断点并亲自查看。如果 myStringProperty 是您自己实现的 getter 方法,只需单击方法实现旁边的左侧装订线即可设置断点。
如果这是一个综合访问器方法,请将其作为符号断点输入 Xcode 的断点导航器中。单击导航器部分中的右箭头图标以选择断点导航器,按窗口底部的 +,然后选择“添加符号断点...”。在符号字段中键入 -[TheClassName myStringProperty],然后单击“完成”。
不隶属于 StackOverflow