Как реализовать "частный" метод в классе Singleton в Objective-C - PullRequest
0 голосов
/ 21 апреля 2011

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

В foo я вызываю "приватный" метод -(void)bar, реализованный в MyClass. Вот как то так:

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

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

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

Как у меня есть закрытые методы в моем синглтон-классе?

1 Ответ

3 голосов
/ 21 апреля 2011

Вы должны использовать «категорию». Это описано здесь: 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

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

...