#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
Затем вы можете реализовать эту функцию как обычную