私はこれをしばらく思っていましたが、Googleは必要な情報を私に提供していませんでした。どのくらいの速さでキャスティングを行うのですか?それはオブジェクトが持つフィールドの数に依存しますか?どんなコストをかけても避けなければならないことはありますか? x32、x64、ARMマシンでは違いますか?Objective-Cオブジェクトのキャスト
1
A
答えて
6
キャスティングは、コンパイラが警告を発行するためのものです。実行時にキャストにパフォーマンスヒットはありません。すべてのオブジェクトは単なるオブジェクトです。これらのオブジェクトにメッセージを送信します。
ランタイムは、コード内でそのオブジェクトへのポインタを持っていたときに与えたタイプを気にしません。それは何に関係なくメッセージを送信します。例えば
:
NSArray *myString = [NSString stringWithFormat:@"Hello"];
NSNumber *longerString = [(NSString *)myString stringByAppendingString:@" World"];
NSLog(@"%@", longerString);
Hello World
を記録します。コンパイラがチェックできるように実際に型を渡しますが、ランタイムはメッセージをオブジェクトに渡していることを知っています。オブジェクトのクラスを使用してメッセージ名から呼び出すメソッドをルックアップしますが、コンパイル時に入力した内容は気にしません。
ます。また行っている可能性:
id myString = [NSString stringWithFormat:@"Hello"];
id longerString = [myString stringByAppendingString:@" World"];
NSLog(@"%@", longerString);
そしてランタイムは、まったく同じことを行いますが、コンパイラは異なり、あなたのタイプを一致させると、異なる意味論に基づく警告/エラーが発生します(基本的には、いずれかを行いますオブジェクトはこのメッセージに応答します)。
+2
+1。鋳造はただの合成糖です。ランタイムとは関係ありません。 –
関連する問題
- 1. キャストJavaオブジェクトをクラスにキャスト
- 2. NumberFormatter - ObjectiveC
- 3. ObjectiveCのAMF0パーサー
- 4. ObjectiveCのJSON解析
- 5. ObjectiveC blocks Java equivalent
- 6. iOS ObjectiveC Webservice
- 7. JRubyでのオブジェクトのキャスト
- 8. あるオブジェクトから別のオブジェクトへキャスト
- 9. Pythonオブジェクトの型キャストとXML
- 10. オブジェクトを元のタイプにキャスト
- 11. ObjectiveCのJava同等のデコード
- 12. ObjectiveC - オブジェクトをパラメータとして追加して解放します。
- 13. ObjectiveC - 分散オブジェクトを介してウィンドウを表示
- 14. 糸くずのエラーobjectiveC
- 15. ObjectiveCの静的変数
- 16. JSONオブジェクトをC#オブジェクトにキャストする
- 17. オブジェクトをカスタムクラスにキャストする
- 18. オブジェクトを配列にキャスト
- 19. ココアタッチでオブジェクトをキャストする
- 20. System.Drawing.Colorにオブジェクトをキャストする
- 21. オブジェクトをHashMapにキャストする
- 22. jsonをhapi fhirオブジェクトにキャスト
- 23. ActionScriptオブジェクトをモデルにキャスト
- 24. WebMatrix.Data.DynamicRecordをオブジェクトにキャストする
- 25. C++:オブジェクトを配列にキャスト
- 26. オブジェクトをジェネリック型にキャスト
- 27. 左右サイドバー+ tabbarController(IOS Objectivec)
- 28. C++でのキャスト中のオブジェクトのスライス
- 29. オブジェクトへのLINQのクエリ結果のキャスト
- 30. Emberオブジェクトへのバニラオブジェクトの自動型キャスト
int、floatなどのスカラー型をキャストしようとしていて、オブジェクトではないとします。オブジェクトをキャストすると、コンパイラが型チェックを行うことができます。 –