質問

次の例では、送信されるメッセージの数は次のとおりです。 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 またはそれが参照するものは取得の実行中に変更されますか? myStringProperty?
  2. 例えば結果は現在の時刻に影響されますか?

他のヒント

- [MyObject MyStringProperty]にブレークポイントを設定して自分のために見えます。MyStringPropertyが自分自身を実装するゲッターメソッドである場合は、スクレークポイントを設定するためにメソッド実装の横にある左側の溝をクリックしてください。

合成されたアクセサメソッドの場合は、Xcodeのブレークポイントナビゲータのシンボリックブレークポイントとして入力します。ナビゲータセクションの右矢印アイコンをクリックしてブレークポイントナビゲータを選択し、ウィンドウの下部に+を押して、「シンボリックブレークポイントを追加...」を選択します。type - [Symbols]フィールドに[SeclassName MyStringProperty]をクリックし、[完了]をクリックします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top