Во время выполнения, как мне перечислить все методы класса Objective C для данного класса? - PullRequest
0 голосов
/ 15 мая 2019

Чтобы получить список всех методов экземпляра для класса Objective-C, вы должны использовать NSClassFromString("UIView"), чтобы получить класс, а затем вызвать class_copyMethodList, чтобы получить список методов.

Но какВы получаете методы класса для этого класса, а не методы экземпляра?

1 Ответ

2 голосов
/ 15 мая 2019

Каждый Objective-C @implementation представлен во время выполнения объектом, «объектом класса». Объект класса управляет словарем методов для методов экземпляра.

Например, для UIView существует объект класса UIView. Когда вы вызываете NSClassFromString(@"UIView") (или [UIView class] или [UIView self]), он возвращает объект класса UIView. Объект класса UIView управляет словарем методов для UIView методов экземпляра.

Объект класса UIView сам является экземпляром другого класса, называемого метаклассом UIView. Метакласс UIView представлен другим объектом класса, объектом метакласса UIView. Объект метакласса UIView управляет словарем методов для UIView методов класса.

Итак, чтобы получить список методов класса для UIView, вам нужно передать объект метакласса UIView в class_copyMethodList.

Class UIView_class = NSClassFromString(@"UIView");
Class UIView_metaclass = object_getClass(UIView_class);
unsigned int count;
Method *classMethods = class_copyMethodList(UIView_metaclass, &count);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...