代码之家  ›  专栏  ›  技术社区  ›  fuzzygoat

需要简单的协议示例吗?

  •  0
  • fuzzygoat  · 技术社区  · 14 年前

    我正努力使我的头脑清醒过来 目标C协议 . 我在自己的几本书中查阅了苹果文档和相关章节,但几乎所有的协议似乎都是通过将它们用作委托对象的接口来定义的。我了解创建协议定义的概念:

    @protocol PetProtocol <NSObject>
    - (void)printCat;
    - (void)printDog;
    @end
    

    我也理解我在哪里使类符合协议:

    @interface CustomController : UIViewController <PetProtocol> {
    

    然后实施所需的方法。

    @implementation CustomController
    
    - (void)printCat {
        NSLog(@"CAT");
    }
    
    - (void)printDog {
        NSLog(@"DOG");
    }
    

    我想我的问题是如何使用这个协议,打电话似乎有点奇怪, printCat printDog CustomController 在实现这些方法的地方,有人能指点我,或者给我一个使用这个协议或类似协议的非常简单的例子吗?

    非常感谢

    加里。

    2 回复  |  直到 14 年前
        1
  •  4
  •   Chuck    14 年前

    协议只是一个对象可以响应的消息列表。如果一个对象符合一个协议,它会说,“我对这些消息作出响应。”这样,您就可以返回一个对象,调用方可以使用它,而不必保证该对象是任何特定类型的。例如,使用该协议,可以执行以下操作:

    id<PetProtocol> getSomeObjectThatConformsToThePetProtocol() {
        return [[[CustomController alloc] init] autorelease];
    }
    
    int main() {
        id<PetProtocol> foo = getSomeObjectThatConformsToThePetProtocol();
        [foo printCat];
        [foo printDog];
        return 0;
    }
    

    看, main() 不需要知道对象是一个自定义控制器,它只知道你可以发送什么消息。任何符合 PetProtocol 会的。这就是协议的目的。

        2
  •  2
  •   livemac    14 年前

    [self.delegate printCat]

    id <PetProtocol> delegate;
    

    @implementation PetClass
    @synthesize delegate;