Осторожно. Вы собираетесь ввести в ObjC довольно глубокую магию, и ошибки, которые вы можете генерировать, просто ошеломляют. Это последние методы, которые вы должны использовать после того, как все остальное не удалось, и вы должны сделать все возможное, чтобы изолировать этот код. Тем не менее, ObjC является очень динамичным языком, и вы можете переписать большинство вещей.
Во-первых, к вашему конкретному вопросу вы можете изменить класс экземпляра, который достигнет того, что вы хотите. Правила в основном:
- Новый класс должен быть подклассом предыдущего класса
- Новый класс не должен добавлять никаких иваров. Добавление ivars в подкласс - это одна из вещей, которая может привести к упомянутым выше ошибкам.
Вы не получите никаких предупреждений или ошибок, если вы сделаете это неправильно. Вы просто получите странные сбои.
Учитывая, что изменить класс объекта на самом деле очень просто:
object->isa = [NewClass class];
Кроме того, вы можете изменить реализацию метода для каждого экземпляра класса, используя метод swizzling. У меня есть несколько примеров этого в Угон с методом method_exchangeImplementations () . Удачи вам в использовании отладчика, как только вы это сделаете.