Как я могу допросить класс безопасным способом? - PullRequest
1 голос
/ 15 июля 2010

Допустим, у меня есть метод, который принимает класс, который называется так:

[registry registerClass:[MyClass class]];

Как мне опросить класс внутри -registerClass:?

-(void) registerClass:(Class)typeClass {

    // Verify that instances of typeClass confirm to protocol / respondsToSelector

    // ?

    // Do stuff
    // ...
    [myListOfClasses addObject:typeClass];
    // ...
}

Это "?" Мне интересно Могу ли я безопасно (и всегда) приводить Class foo к NSObject *fooObj и отправлять ему сообщения, предполагая, что foo всегда будет подклассом NSObject? Существует ли корневой метакласс, от которого наследуются все метаклассы NSObject? Или все объекты Class являются просто экземплярами одного метакласса?

1 Ответ

2 голосов
/ 15 июля 2010

Тип Class также является объектом, и для него могут быть вызваны методы.В листинге 5 этого примера Apple показаны некоторые примеры методов, которые можно вызывать для объекта Class.

В частности, вы можете вызвать conformsToProtocol: для объекта класса, например:

[ typeClass conformsToProtocol: @protocol( MyProtocol ) ];

Или вы можете использовать instancesRespondToSelector: чтобы увидеть, реализуют ли экземпляры этого класса селектор.

[ typeClass instancesRespondToSelector: @selector( MyNeatMethod ) ];

Имейте в виду, что вызов responsedsToSelector: для объекта Class будет проверять методы класса, которые реализует класс, ине экземпляры методов для класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...