【问题标题】:What does < > mean / represent in a class interface?< > 在类接口中是什么意思/代表什么?
【发布时间】:2009-10-09 03:37:38
【问题描述】:

我确定我在某处读过这篇文章,谁能告诉我以下界面中的 代表什么?

@interface GameFinder : NSObject <NSNetServiceBrowserDelegate>
@end

NSObject 是否采用&lt;NSNetServiceBrowserDelegate&gt;

编辑

让我困惑的一件事......

在我的例子中。界面显示NSNetServiceBrowserDelegate

@interface ITunesFinder : NSObject <NSNetServiceBrowserDelegate>
@end

但是实现显示netServiceBrowser,这些是同一个吗?

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

加里

【问题讨论】:

    标签: objective-c cocoa


    【解决方案1】:

    尖括号表示该类满足的协议Objective-C Wikipedia 文章中有关于协议的详细信息,可能有助于为您解决一些问题。协议包含您的类可以提供的必需和可选例程。在后一种情况下,如果您的类没有实现例程,则使用默认实现/行为来代替。

    【讨论】:

      【解决方案2】:

      &lt; &gt; 表示一个类符合的协议(或协议列表)。 Objective-C 协议就像 Java 中的 接口:它是符合类必须实现的方法列表。

      【讨论】:

      • +1 简短而甜蜜的答案。只是一件小事;它是符合类应该实现的方法列表。没有必须
      • 是的,但是如果你没有实现所有的方法,gcc 会抛出一个警告。
      【解决方案3】:

      接口声明中的尖括号表示该接口实现的 Objective-C protocols 列表。在这种情况下,GameFinder 符合NSNetServiceBrowserDelegate 协议。 Objective-C Language Reference 有关于协议的完整部分(并且是您在学习 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 协议未完全实现的警告。

      【讨论】:

        【解决方案4】:

        NSNetServiceBrowser 是一个类。 NSNetServiceBrowserDelegate 是一个协议,指定 NSNetServiceBrowser 的委托必须实现哪些方法。

        【讨论】:

        • 谢谢 Chuck,所以 netServiceBrowser 是 NSNetServiceBrowser 的一个方法?
        • AFAIK,没有“netServiceBrowser”这样的方法。如果你说的是netServiceBrowser:didFindService:moreComing:,那么这是一个NSNetServiceBrowser的委托可以实现的方法。
        猜你喜欢
        • 2014-06-02
        • 1970-01-01
        • 2022-08-18
        • 1970-01-01
        • 1970-01-01
        • 2011-08-12
        • 2017-06-11
        • 2018-03-05
        • 2023-03-27
        相关资源
        最近更新 更多