Если метод определен как в классе, так и в категории этого класса,
неизвестно, какая реализация будет вызвана.
Это неверно; метод категории всегда победит. Однако, что не сработает, так это если у вас есть несколько категорий, которые реализуют один и тот же метод, тогда «какая победит» не определена.
Обычно это «последние выигранные выигрыши», но на самом деле это тоже не жесткое правило.
Обратите внимание, что, поскольку многие классы имеют внутреннюю реализацию, разделяющую категории, для целей организации кода, вы все равно не можете полагаться на первое правило.
Короче говоря, что сказал Иисус Навин; Не переопределять методы, использующие категории.
Помимо причин наследования, вы также злобно нарушаете инкапсуляцию, когда делаете это. Дело не в том, что реализация на основе категорий переопределяет существующий метод, а полностью его заменяет. Таким образом, если вы не воспроизведете все последние детали внутренней реализации, включая ошибки, ваша замена не будет работать правильно, и отладка будет трудной .