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

Где бы я поместил глобальную функцию полезности в Objective C?

При написании приложения iOS, где бы я разместил функцию, которую я намерен использовать из любого другого файла?

Например, функция преобразования NSDate в относительную временную строку ( "5 секунд назад" ). Могу ли я создать класс и сделать все эти функции статическими?

4b9b3361

Ответ 1

Функции могут быть размещены везде, где это удобно. Если функция или группа функций могут быть импортированы во многих местах, вы можете объявить и реализовать их в своей собственной паре .h/.m. Например, вы можете реализовать свою функцию преобразования даты в файле с именем XYZDateUtilities.m и объявить ее в XYZDateUtilities.h.

Объявление функций с помощью определителя static ограничивает их область действия файлом, в котором они были объявлены, поэтому вы не захотите этого делать; на самом деле вы хотели бы сделать обратное - объявите их как extern в файле .h, чтобы они были видны в других файлах.

Ответ 2

У вас есть несколько вариантов:

1) Если вы расширяете поведение класса (например, метод преобразования строки NSDate, который вы описали), он может работать лучше всего, чтобы просто создать категорию в указанном классе.

Вот учебник по категориям iOS:

http://mobile.tutsplus.com/tutorials/iphone/objective-c-categories/

Важное примечание:

Категории изменяют поведение класса (если вы переопределяете метод) везде внутри проекта, включите ли вы заголовок (.h) в другой определенный класс импорта

По этой причине обычно лучше не переопределять методы через категорию, а вместо этого создавать подкласс, если вы хотите изменить определенные методы.

Однако для добавления новых методов категории могут быть очень удобными и полезными.

2) Если вы хотите создать новый класс, который был импортирован повсюду, вы можете создать указанный класс и поместить его заголовок, т.е. #import "MyClass.h", в ваш проект prefix.pch файл (найденный в группе "поддерживающие файлы" в пределах проект по умолчанию).

Все, что вы помещаете в файл prefix.pch, будет доступно в любом месте вашего приложения. Это также полезно для размещения констант (например, строк) или определения перечислений, которые используются во многих классах в приложении.

Надеюсь, это поможет. Дайте мне знать, если потребуется дополнительное разъяснение, и я сделаю все возможное, чтобы помочь.

Ура!

Ответ 3

Другой вариант - создать класс для ваших вспомогательных методов и реализовать все помощники как методы класса.

например. HelperClass.h

+ (NSString *)getFrenchCapital

например. HelperClass.m

+ (NSString *)getFrenchCapital
{
    return @"Paris";
}

Затем импортируйте свой вспомогательный класс везде, где он вам нужен, и просто вызовите методы класса:

например. Foo.m

#import "HelperClass.h"

...

- (void)logFrenchCapital
{
    NSLog(@"Capital of France: %@", [HelperClass getFrenchCapital]);
} 

Ответ 4

Если вы ставите все функции в классе, альтернатива - это просто определить функции в файле .m и extern-функции в файле .h, как и то, что вы делаете на C.