Как сделать прямое объявление для частного метода?

#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() .