Как заменить реализацию метода класса Objective-C 2.0 во время выполнения - PullRequest
2 голосов
/ 12 июля 2010

Я использовал функцию class_replaceMethod, и она хорошо работает с методами экземпляра, но не работает с заменой метода класса.

Кто-нибудь знает, почему и что я должен сделать, чтобы заменить реализацию метода класса?

1 Ответ

7 голосов
/ 12 июля 2010

Если у вас есть Class (мы назовем его MyClass), то вы должны заставить его метакласс работать с методами класса.

Другими словами:

Class myClass = [MyClass class];
unsigned int numInstanceMethods = 0;
Method * instanceMethods = class_copyMethodList(myClass, &numInstanceMethods);
//instanceMethods is an array of all instance methods for MyClass

Class myMetaClass = objc_getMetaClass(class_getName(myClass));
unsigned int numClassMethods = 0;
Method * classMethods = class_copyMethodList(myMetaClass, &numClassMethods);
//classMethods is an array of all class methods for MyClass

По сути, класс предназначен для работы с вещами уровня экземпляра, а мета-класс для работы с вещами уровня класса.

Надеюсь, этого достаточно, чтобы помочь вам понять, куда идти дальше.,:)

Более удивительно полезная информация: http://www.sealiesoftware.com/blog/archive/2009/04/14/objc_explain_Classes_and_metaclasses.html

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