2

Objective-cで特定のクラスのすべての子孫クラスのリストを取得することは可能ですか?

何かのようなもの:

  @interface A : NSObject
  @end

  @interface B : A
  @end

  @interface C : A
  @end

  NSArray *descendants = [A allDescendants];  // descendants = [B, C]
4

3 に答える 3

5

私が考えることができる唯一の方法は、ランタイムでクラスのリスト全体を列挙し( で取得objc_getClassList)、それぞれをテストすることですisKindOfClass:A

クラスはその子孫へのリンクを維持しないため (スーパークラスへのリンクのみ)、これがおそらく唯一の解決策です。

于 2008-12-14T22:29:09.420 に答える
1

例として、 Ken Ferryによる解決策Wil Shipleyのブログ投稿にリンクしています。

基本的に、クラスを歩きます。

于 2008-12-15T10:29:26.080 に答える
0

どういうわけかクラスのメンバーを使ってもらえますか?呼び出すと、selfのスーパークラスのクラス[[A class] superclass]のインスタンスが返されます。Classクラスの名前はそのクラスから取得できると思いますClass-それはあなたが望むことをしますか?

これは実際にはプロトコルをまったく処理しませんが、少なくともこれは正しい方向を示すでしょう。

于 2008-12-15T00:03:15.127 に答える