Почему нет способа сделать самоанализ в Objective C с объектами? - PullRequest
0 голосов
/ 21 мая 2010

Я видел примеры (особенно здесь) вызова отвратительных функций C и возврата структур, которые должны быть повторены, изобилующие множествами нижних черт.

Почему я не могу сделать это (псевдо, чтобы следовать):

  Money *cost = [[Money alloc] init];

  for (Property *property in [[cost class] properties]){
    ..
  }

  for (Method *method in [[cost class] methods]){
    ..
  }

Ответы [ 3 ]

8 голосов
/ 21 мая 2010

Эти функции не являются отвратительными. Все они документированы в Objective-C Runtime Reference .

Одна из причин, по которой я думаю, что нет методов +properties и +methods, заключается в том, что редко вам нужно искать свойство / метод, для которого вы не знаете имя во время компиляции.

Наиболее полезными функциями интроспекции в ObjC являются -respondsToSelector:, -isKindOfClass:, -conformsToProtocol:, NSInvocation, KVC, KVO, NS Xxxx FromString, и они равны работа с объектами.

1 голос
/ 21 мая 2010

Вот почему вы не можете этого сделать: потому что Cocoa работает на уровне выше времени выполнения. Функции среды выполнения Objective C не могут разумно зависеть от Cocoa, необязательной библиотеки, реализованной поверх нее. Можно было бы создать объектно-ориентированный слой поверх API времени выполнения, но это не было целью проектирования Какао. Просто не обязательно делать то, что делает Какао.

0 голосов
/ 22 мая 2010

Проверьте NSClassDescription и методы покрытия на NSObject . Это может быть близко к тому, что вы ищете.

...