Перечисление потомков в Objective-C - PullRequest
2 голосов
/ 15 декабря 2008

Можно ли получить список всех классов-потомков определенного класса в target-c?

Что-то вроде:

  @interface A : NSObject
  @end

  @interface B : A
  @end

  @interface C : A
  @end

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

Ответы [ 3 ]

5 голосов
/ 15 декабря 2008

Единственный способ, которым я могу думать, - это перечислить весь список классов во время выполнения (полученный с помощью objc_getClassList) и проверить каждый из них на isKindOfClass:A.

Вероятно, это единственное решение, поскольку классы не поддерживают ссылки на своих потомков (только на суперкласс).

1 голос
/ 15 декабря 2008

В качестве примера я ссылаюсь на решение от Кена Ферри на Уил Шипли сообщение в блоге.

По сути, ходьба на занятиях.

0 голосов
/ 15 декабря 2008

Не могли бы вы как-нибудь использовать ученика? Вызов [[A class] superclass] возвращает экземпляр класса Class для суперкласса self. Я думаю, что вы можете получить имя класса из его Class - это будет делать то, что вы хотите?

Это не совсем работает с протоколами, но, возможно, это укажет вам, по крайней мере, правильное направление.

...