2012-03-30 21 views
1

私はこれをしばらく思っていましたが、Googleは必要な情報を私に提供していませんでした。どのくらいの速さでキャスティングを行うのですか?それはオブジェクトが持つフィールドの数に依存しますか?どんなコストをかけても避けなければならないことはありますか? x32、x64、ARMマシンでは違いますか?Objective-Cオブジェクトのキャスト

+0

int、floatなどのスカラー型をキャストしようとしていて、オブジェクトではないとします。オブジェクトをキャストすると、コンパイラが型チェックを行うことができます。 –

答えて

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。鋳造はただの合成糖です。ランタイムとは関係ありません。 –

関連する問題