Как объявить методы в target c за пределами интерфейса? - PullRequest
1 голос
/ 30 марта 2012

Когда метод объявлен в файле .h, обнаруживается intelisense и предупреждения не выдаются, когда метод используется в файле .m.

Когда метод объявляется только в файле .m, intelisense не обнаруживает его, если он объявлен ниже метода, в котором он используется.

Чтобы избежать предупреждений, в xcode есть флаг, но я предпочитаю не отключать его.

Есть ли какой-нибудь способ объявить методы в .m, чтобы они были обнаружены intelisense и без предупреждения?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 30 марта 2012

Два способа это исправить:

Либо: используйте расширение класса , чтобы объявить закрытые методы в верхней части файла .m:

@interface Foo ()

- (void)privateMethod;

@end

Или: Обновить до Xcode 4.3.1, который содержит более новую версию clang. Эта более новая версия компилятора не нуждается в ранее объявленных методах для вызова их в том же модуле компиляции.

Расширения классов по-прежнему хороши для совместимости или для объявления частных свойств.

1 голос
/ 30 марта 2012

Вы можете использовать категорию для объявления дополнительных методов в классе.

Например, добавив это в начало вашего файла .m:

@interface MyClass (PrivateCategory)

-(void)foo;
-(void)bar;

@end

даст Xcode знать, чтоMyClass дополнительно отвечает на foo и bar.(PrivateCategory) сообщает компилятору, что вы добавляете методы, которые должны быть "сгруппированы" в категорию PrivateCategory.Вы можете выбрать любое имя, которое хотите, или даже вообще не называть его (хотя «анонимная категория» имеет немного другую семантику).

...