Могу ли я использовать категорию класса для переопределения метода, который уже реализован с использованием категории? Как это:
1) Оригинальный метод
-(BOOL) method {
return true;
}
2) Переопределенный метод
-(BOOL) method {
NSLog(@"error?");
return true;
}
Будет ли это работать или это незаконно?
источник
Вы можете сделать это, адаптировав подход Class Cluster или используя технику swizzling методов.
В противном случае поведение двух или более категоризированных методов не определено.
источник
Ссылка на старую документацию мертва; лучшая замена, которую я смог найти, была здесь: Apple Docs :
Apple использует более легкое прикосновение, но суть та же: вы приглашаете катастрофу, потому что непредсказуемое поведение молчит.
источник
Важно отметить, что категорию также можно использовать для переопределения существующих методов в базовом классе (например, метода привода класса Car), но вы никогда не должны этого делать. Проблема в том, что категории представляют собой плоскую организационную структуру. Если вы переопределите существующий метод в Car + Maintenance.m, а затем решите, что хотите снова изменить его поведение с помощью другой категории, Objective-C не сможет узнать, какую реализацию использовать. В такой ситуации создание подклассов - почти всегда лучший вариант.
Из этого руководства http://rypress.com/tutorials/objective-c/categories
источник