【问题标题】: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)。

    1. 例如在获取myStringProperty 的执行过程中,myObject 或它引用的任何内容是否会发生变化?
    2. 例如结果是否受当前时间影响?

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-07-10
        • 1970-01-01
        • 2012-05-11
        • 1970-01-01
        • 1970-01-01
        • 2011-02-07
        • 1970-01-01
        • 2012-10-21
        • 2012-09-09
        相关资源
        最近更新 更多