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 またはそれが参照するものは取得の実行中に変更されますか?
myStringProperty
? - 例えば結果は現在の時刻に影響されますか?
他のヒント
- [MyObject MyStringProperty]にブレークポイントを設定して自分のために見えます。MyStringPropertyが自分自身を実装するゲッターメソッドである場合は、スクレークポイントを設定するためにメソッド実装の横にある左側の溝をクリックしてください。
合成されたアクセサメソッドの場合は、Xcodeのブレークポイントナビゲータのシンボリックブレークポイントとして入力します。ナビゲータセクションの右矢印アイコンをクリックしてブレークポイントナビゲータを選択し、ウィンドウの下部に+を押して、「シンボリックブレークポイントを追加...」を選択します。type - [Symbols]フィールドに[SeclassName MyStringProperty]をクリックし、[完了]をクリックします。