Я предполагаю, что вы не объявили -nameOfMethod
в интерфейсе класса, и вы вызываете его из другого метода, реализация которого предшествует реализации -nameOfMethod
, то есть:
- (void)someMethod {
[self nameOfMethod];
}
- (void)nameOfMethod {
// …
}
Когдакомпилятор анализирует -someMethod
и -nameOfMethod
не был объявлен в интерфейсе класса, он генерирует предупреждение, потому что он еще не знает о -nameOfMethod
.
По сути, есть два решения для этого,Вы можете изменить порядок файлов реализации так, чтобы -nameOfMethod
появлялся перед -someMethod
, но это не всегда возможно.Лучшее решение - объявить -nameOfMethod
в интерфейсе класса.Если предполагается, что клиенты вашего класса будут вызывать -nameOfMethod
, поместите его в соответствующий заголовочный файл.С другой стороны, если предполагается, что -nameOfMethod
вызывается только внутри вашего файла реализации, используйте расширение класса.Предположим, что ваш класс называется SomeClass
, вот как будут выглядеть ваши заголовочные файлы и файлы реализации:
// SomeClass.h
@interface SomeClass : NSObject {
// … instance variables
}
// … external methods
- (void)someMethod;
@end
// SomeClass.m
#import "SomeClass.h"
@interface SomeClass () // this is a class extension
// … internal methods
- (void)nameOfMethod;
@end
@implementation SomeClass
- (void)someMethod {
[self nameOfMethod];
}
- (void)nameOfMethod {
// …
}
@end
При использовании расширений классов порядок реализации методов не будет иметь значения.