Если нет класса, с которым можно было бы четко связать его, я использую функцию. Я также использую функции для этих служебных битов, потому что они могут быть удалены, если они не используются или на них нет ссылок. В связи с этим также полезно использовать функцию, потому что ошибка ссылки лучше, чем ошибка времени выполнения (даже .m был случайно исключен из сборки или если на него ссылалась другая внешне обновленная методика). Одна проблема с символами ObjC состоит в том, что они не удаляются, поэтому они, естественно, несут большую степень зависимости - все методы и классы objc, а также необходимые методы категорий должны существовать в конечном двоичном файле. Это не проблема для действительно небольших программ или библиотек, но она быстро набирает вес со средними / большими системами и библиотеками.
Все не нужно объявлять в @interface
- особенно в больших системах, где все эти объявления действительно превратят ваши взаимозависимости в спагетти. По сравнению с методами, функции быстрее, меньше, могут лучше оптимизироваться компилятором или во время компоновки и могут быть удалены, если на них нет ссылок.
Если вам нужен полиморфизм, он просто принадлежит классу для организации или удобства, тогда метод класса или экземпляра часто является лучшим выбором.
Я также минимизирую методы объявления категорий по тем же причинам. Когда вы используете функции, вы можете легко написать метод-обертку там, где он вам нужен, и получить лучшее из обоих миров.