Что означает <> / представляет в интерфейсе класса? - PullRequest
2 голосов
/ 08 октября 2009

Я уверен, что где-то это читал. Может кто-нибудь сказать мне, что символизирует <> в следующем интерфейсе?

@interface GameFinder : NSObject <NSNetServiceBrowserDelegate>
@end

принимает ли NSObject <NSNetServiceBrowserDelegate>?

EDIT

Одна вещь, которая меня смущает ...

в моем примере. Интерфейс показывает NSNetServiceBrowserDelegate

@interface ITunesFinder : NSObject <NSNetServiceBrowserDelegate>
@end

но реализация показывает netServiceBrowser , это одно и то же?

@implementation ITunesFinder
-(void) netServiceBrowser: (NSNetServiceBrowser *) browser
           didFindService: (NSNetService *) service
               moreComing: (BOOL) moreComing {

1021 * Гэри *

Ответы [ 4 ]

13 голосов
/ 08 октября 2009

Угловые скобки обозначают Протоколы , которым соответствует этот класс. В статье Objective-C Wikipedia есть подробности о протоколах, которые могут помочь вам кое-что прояснить. Протоколы содержат как обязательные, так и необязательные подпрограммы, которые может предоставить ваш класс. В последнем случае, если подпрограмма не реализована вашим классом, вместо нее используется реализация / поведение по умолчанию.

5 голосов
/ 08 октября 2009

< > представляет протокол (или список протоколов), которому соответствует класс. Протокол Objective C подобен интерфейсу в Java: это список методов, которые должен реализовать соответствующий класс.

3 голосов
/ 08 октября 2009

Угловые скобки в объявлении интерфейса обозначают список Objective-C protocols, который реализует интерфейс. В этом случае это GameFinder соответствует протоколу NSNetServiceBrowserDelegate. Справочник по языку Objective-C содержит полный раздел о протоколах (и это справочник, который вы должны держать под рукой в ​​целом, изучая Objective-C). По сути, протокол - это интерфейс, который описывает методы, которые класс должен реализовать, чтобы соответствовать этому протоколу. Интерфейсы Classe могут объявить, используя обозначение угловой скобки, что они соответствуют (реализуют) протокол. Компилятор проверит соответствие протокола, если вы предоставите информацию о протоколе в объявлениях типа:

@interface Foo <Bar>
...

- (void)methodRequiringBar:(id<Bar>)arg;
@end

@interface Foo2 <Baz>
...
@end


id<Bar> v = [[Foo alloc] init]; //OK
id<Baz> v = [[Foo alloc] init]; //warning

[v methodRequiringBar:[[Foo2 alloc] init]]; //warning

Компилятор также предупредит вас, если интерфейс класса объявляет соответствие протоколу, но не все необходимые методы в этом протоколе реализованы реализацией класса:

@protocol Bar
@required
- (void)requiredMethod;
@optional
- (void)optionalMethod;
@end

@interface Foo <Bar>
...
@end

@implementation Foo
- (void)optionalMethod {
...
}
@end

выдаст предупреждение о том, что протокол Bar реализован не полностью.

0 голосов
/ 08 октября 2009

NSNetServiceBrowser - это класс. NSNetServiceBrowserDelegate - это протокол, определяющий, какие методы должен реализовывать делегат NSNetServiceBrowser.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...