#iphone #objective-c #forward-declaration
#iPhone #objective-c #прямое объявление
Вопрос:
Я разбиваю свои методы на группы, используя #pragma mark в реализации. Но иногда код реализации метода появляется под кодом, который вызывает этот метод, и я получаю предупреждения «Метод экземпляра не найден». Это происходит, когда я использую частные методы. Как это исправить?
Ответ №1:
Самый простой метод — использовать анонимную категорию. Добавьте что-то вроде этого в начало вашего .m
файла, перед вашим @implementation
:
@interface MyClass()
- (void)myPrivateMethod;
@end
Ответ №2:
В вашем файле реализации Class.m вы можете добавить раздел интерфейса в начале и объявить там частные функции:
@interface YourClassName (private)
-(void)aPrivateMethod:(NSString*)aParameter;
...
@end
@implementation YourClassName
...
@end
Ответ №3:
В этом случае вы бы использовали расширение класса внутри вашего файла реализации для определения этих методов. Таким образом, ваш «общедоступный» API по-прежнему определен в вашем заголовочном файле, а ваш файл реализации содержит определение ваших псевдоприватных методов.
YourClass.m
@interface MyClass()
- (void)myPrivateMethod;
@end
@implementation MyClass
- (void)myPublicMethod
{
// This will not throw an error or warning
[self myPrivateMethod];
}
- (void)myPrivateMethod
{
// Do something
}
@end
Комментарии:
1. Недостатком использования именованной категории является то, что вам нужна соответствующая
@implementation MyClass(PrivateMethods)
, иначе вы бы получили предупреждение. Просто используйте анонимную категорию.2. Предпочтительный синтаксис для расширения частного класса
@interface MyClass()
.