にクラス型の構造体に方式リストのための二重のポインタを使用していますなぜ私はiOSのランタイムに、クラスは以下のようである構造体(ので、他のOCオブジェクトである)になるという読み:上記でAppleはiOSのランタイム
struct objc_class {
Class isa OBJC_ISA_AVAILABILITY;
#if !__OBJC2__
Class super_class OBJC2_UNAVAILABLE;
const char *name OBJC2_UNAVAILABLE;
long version OBJC2_UNAVAILABLE;
long info OBJC2_UNAVAILABLE;
long instance_size OBJC2_UNAVAILABLE;
struct objc_ivar_list *ivars OBJC2_UNAVAILABLE;
struct objc_method_list **methodLists OBJC2_UNAVAILABLE;
struct objc_cache *cache OBJC2_UNAVAILABLE;
struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;
#endif
} OBJC2_UNAVAILABLE;
構造体、これがあります:
struct objc_method_list **methodLists OBJC2_UNAVAILABLE;
私はC
で新人だとOCは、メソッドのリストについては、**
をポインタへのポインタを使用している理由私はかなり理解していません。
struct objc_cache *cache OBJC2_UNAVAILABLE;
ので。
私はAppleが理由cache
またはprotocols
ためmethod lists
の代わりに、単一のもの*
ため**
ダブルポインタを使用していますね。
methodList
の代わりにmethodLists
と表示されるのはなぜですか。
私は今、cache
,protocols
とmethodLists
を比較しています。
アップルは、テクニカルな理由から、*
の代わりに**
をメソッドリストに使用していると思います。私は知りたいと思います。
ポインタが*
の場合は、Appleがdouble **
を使用していないのをなぜ覚えていますか?
ObjC 2のpreクラスの定義があります。 ObjC 2.xは何年にもわたっています(少なくとも6、IIRC)。その仕様はかなり古いものです。いずれにしても、なぜApple(またはNeXT)がそれをそのように設計したのか、それはその意見です。問題はSOに属していません。 – Avi
私のCは錆びますが、mallocされるポインタの配列をどのように宣言するのでしょうか? – danh
@Avi私は意見を求めていませんが、私は単純なリンクリスト '* method'を' * protocols'や '* cache'のように使うことができない理由と、' methodListの代わりに 'methodLists' '。 – Boris