Как реализовать «частный» метод в классе Singleton в Objective-C

#objective-c #singleton #private

#objective-c #синглтон #Частное

Вопрос:

У меня есть одноэлементный MyClass в Objective-C. Допустим, в singleton у меня есть метод, -(void)foo который другие классы передают с помощью [ [MyClass sharedManager] foo] .

В foo я вызываю «частный» метод, -(void)bar реализованный в MyClass. Итак, что-то вроде этого:

 -(void)foo {
     [self bar];
}
  

Поскольку я хочу, чтобы bar был закрытым (как можно более закрытым в Objective-C), у меня нет определения bar в моем файле MyClass.h. Это вызывает предупреждение в XCode:

Метод ‘-bar’ не найден (возвращаемый тип по умолчанию равен ‘id’)

Откуда у меня есть частные методы в моем классе singleton?

Ответ №1:

Вы должны использовать «категорию». Это описано здесь:http://macdevelopertips.com/objective-c/private-methods.html

По сути, вы просто объявляете методы в файле реализации. Категории могут использоваться для других целей, но это довольно простой способ их использования.

Единственное, что я бы изменил по сравнению с примером кода на этом сайте, это то, что у них есть это в верхней части файла реализации:

 // =================================
// = Interface for hidden methods
// =================================
@interface SomeClass (hidden)
  

Вы должны изменить его на:

 // =================================
// = Interface for hidden methods
// =================================
@interface SomeClass ()
  

Это делает его «анонимной категорией». Вам не нужно называть его, потому что вы реализуете функции прямо здесь, в том же файле.

Итак, если вы хотите объявить закрытый метод -(void)bar в своем классе, вы бы сделали:

 @interface MyClass ()
-(void)bar;
@end
  

Затем вы можете реализовать эту функцию как обычную