Обратите внимание, что они не обязательно эквивалентны.Поскольку -mySubroutine
является методом экземпляра, ему, вероятно, необходим доступ к данному экземпляру.В этом случае ваша функция mySubroutine()
должна иметь и другой параметр для экземпляра.
В общем, используйте метод.Если вас беспокоит производительность, 1 вы всегда можете получить IMP
для метода и использовать его как функцию вместо стандартной инфраструктуры диспетчеризации сообщений Objective-C.
Есть некоторые недостатки использования функций:
- Они не могут быть переопределены подклассами;
- Нет самоанализа (при использовании среды выполнения для получения списка методов, объявленных Objective-Cкласс, функции не перечисляются);
- Они не могут использоваться как средства доступа / мутаторы объявленных свойств;
- Они не видны для Кодировка значения ключа ;
- Они не могут напрямую использоваться для пересылки сообщений Objective-C;
- Они не могут напрямую использоваться в различных случаях, когда API-интерфейс Cocoa ожидает селектор (например, при использовании
NSTimer
).
Некоторые преимущества использования функций:
- Они не могут быть переопределены подклассами (если вы хотите предотвратить это);
- Там нет самоанализа (если выхочу для предотвращения этого);
- Они могут быть встроенными;
- Они могут иметь область видимости файлов (
static
), предотвращая доступ к ним кода из других файлов.
1 Когда вы определили, что инфраструктура отправки сообщений является узким местом.Это действительно происходит;например, некоторые аудио-примеры Apple не используют Objective-C для обработки аудио.
Редактировать: Основываясь на комментарии OP, еще одно преимущество функций заключается в том, что они не обязательно связаны сучебный класс.Если вычисление приближенного значения для синуса угла не зависит от экземпляра Objective-C, нет необходимости делать его методом - функция лучше подходит.