正如 Inerdial 在他的评论中提到的,主要问题(如何在运行时从类中删除方法?)在here 中得到了详尽的回答。
MattDiPasquale 也问:
还有,class_addMethod是添加实例方法还是类方法?
Inerdial 再次正确:
class_addMethod 添加一个实例方法,而要添加一个类方法,你需要在该类的类中添加一个实例方法。
给定一个类 c,我们可以像
一样简单地掌握它是实例的类(称为“元类”)
Class metac = object_getClass(c);
然后为c“添加一个类方法”,我们使用class_addMethod向metac添加一个方法。
例如,如果我们已经在其他地方定义了
id myClassMethodImplementation(id self, SEL _cmd) {
//implementation
}
然后我们可以向 c 添加一个类方法如下:
BOOL success = class_addMethod(metac, @selector(myClassMethod), (IMP)myClassMethodImplementation, "@@:");
或等效
BOOL success = class_addMethod(object_getClass(c), @selector(myClassMethod), (IMP)myClassMethodImplementation, "@@:");
要在 c 上简单地添加与 instance 方法相同的方法,我们只需编写
BOOL success = class_addMethod(c, @selector(myClassMethod), (IMP)myClassMethodImplementation, "@@:");
参考资料:
1.Objective-C Runtime Reference 2.Objective-C Runtime Programming Guide - Type Encodings 3.Cocoa with Love - What is a meta-class in Objective-C?