Как упомянул Inerdial в своем комментарии, на главный вопрос (Как можно удалить метод из класса во время выполнения?) Довольно исчерпывающе дан ответ здесь .
MattDiPasquale также спрашивает:
Кроме того, class_addMethod добавляет метод экземпляра или метод класса?
Inerdial снова верен:
class_addMethod добавляет метод экземпляраи что для добавления метода класса вам нужно добавить метод экземпляра к классу класса.
Учитывая Class c, мы можем получить в свои руки классиз которых это экземпляр (известный как его «метакласс») просто как
Class metac = object_getClass(c);
Чтобы затем «добавить метод класса» в c, мы добавляем метод в metac, используя class_addMethod.
Если, например, в другом месте мы уже определили
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, "@@:");
Чтобы просто добавить этот же метод в качестве метода instance на c, мы просто пишем
BOOL success = class_addMethod(c, @selector(myClassMethod), (IMP)myClassMethodImplementation, "@@:");
Ссылки: 1. Objective-C Runtime Reference 2. Руководство по программированию в Objective-C - Кодировки типов 3. Какао с любовью - Что такое мета-класс в Objective-C?