2011-06-21 7 views
4

興味深いところで、コンパイルされたObjective-Cのメソッド名はどのようにメモリに格納されていますか?重要な主な理由は、動的な型指定をよりよく理解することです。メソッド名はどのようにランタイムメモリに格納されますか?

ありがとうございます!

+0

回答者はhttp://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008048にあります。しかし、おそらくそのドキュメントは少し長いです。 Thouhg、私はすべてのメソッドが実行時に仮想テーブルに集まったと思った。 – v1Axvw

答えて

3

実際に深みを持たせたい場合は、ランタイムのソースをbtwで利用できます。

要するに、それらのセレクタであるメソッド名は、バイナリのmach-oにC文字列として格納されます。私。方法が-(void)foo:(int)a bar:(int)b;の場合、mach-oにはセレクタfoo:bar:が存在します。

タイプエンコード情報は、mach-oファイルの別のセグメントにも格納されます。その型情報(それを検索するランタイムにAPIがある)は、メソッドの戻り値と引数の型を記述します。

型情報が不完全であることに注意してください。型情報を使用して、メソッドへの引数を一般的にエンコード/デコードし、メソッドから値を返す方法を理解することは非常に難しいことにも注意してください。

+0

すばらしい答え!ありがとうございました。 –

関連する問題