如何在运行时替换Objective-C 2.0类方法实现

Edw*_*ard 2 objective-c

我已经使用了class_replaceMethod函数,它适用于实例方法,但我不能使用类方法替换.

有没有人知道为什么我应该做什么来替换类方法实现?

Dav*_*ong 7

如果你有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
Run Code Online (Sandbox Code Playgroud)

基本上,该类用于在实例级别的东西上操作,而元类用于在类级别的东西上操作.

希望这足以帮助您找出从这里开始的地方.:)

更多非常有用的信息:http://www.sealiesoftware.com/blog/archive/2009/04/14/objc_explain_Classes_and_metaclasses.html