Подтвердить что ты не робот

Вспомогательные функции в Cocoa

Каков стандартный способ включения вспомогательных/служебных функций в классы Obj-C?

т.е. Функции общего назначения, используемые во всем приложении и вызываемые более чем одним классом.

Может ли метод Obj-C существовать вне класса или ему нужна функция C для такого поведения?

4b9b3361

Ответ 1

В Objective-C имеется ряд опций. Во-первых, поскольку Obj-C является строгим надмножеством C, вы можете определить все ваши библиотечные функции в отдельном модуле (исходном файле) и с радостью назвать их из любого объекта/кода Obj-C, который у вас уже есть. Если вы создаете исходный файл obj-c (файл .m), вы можете перезвонить в/использовать объекты.

Если ваши общие функции логически манипулируют другими, установленными объектами (для экземпляров, работает на NSString), вы можете использовать категории, чтобы отображать ваши функции на уже существующих классах (где это имеет смысл).

Наконец, как указывает Тони, вы можете создавать классы со статическими методами (хотя мне это нравится как минимум, лично). Я имею тенденцию использовать сочетание одного из двух... добавление категорий, где это необходимо, и использование стандартных функций для других. Обычно я создаю новый класс, где имеет смысл создавать класс.

Ответ 2

Я бы сгруппировал аналогичные функции как статические методы в вспомогательном классе. Затем их можно вызвать, используя имя класса, а не имя экземпляра. Статические методы определяются с помощью + вместо обычного -.

так:

@interface HelperClass: superclassname {
    // instance variables - none if all methods are static.
}

+ (void) helperMethod: (int) parameter_varName;

@end

Это будет вызвано так.

[HelperClass helperMethod: 10 ];

Поскольку это статично, вы не инициализируете/не выделяете класс. Преимущество этой функции состоит в том, чтобы четко группировать функции Helper. Вы можете использовать автономные функции C, но по мере того, как ваше приложение становится больше, оно может стать правильным беспорядком! Надеюсь, это поможет.

Тони

Ответ 3

Я не понимаю, почему люди избегают создания функций. Objective-C является надмножеством C, что означает, что C является его частью. Более того, он полностью интегрирован - между ними нет стены.

Создать функции! Это нормально! Фонд делает это. Application Kit делает это. Core Animation делает это. Core Media делает это.

Я не вижу причин для этого.