在chatty app </delegate>中的id <delegate>

时间:2011-01-03 10:31:09

标签: objective-c ios4

如果发现这个声明,在聊天应用程序中

,但我无法在任何地方找到解释。 id delegate

RoomDelegate是一个班级。这里发生了什么?

3 个答案:

答案 0 :(得分:2)

代理是类之间通信的常用方式。例如,如果希望在对象完成某个活动时收到通知,则可以将该类注册为该对象的委托,只要您的类实现了所需的委托方法,就会自动调用这些方法。

在这个例子中,“id delegate”只是一个实例变量,有问题的类将用于存储对委托对象的引用。 (即:在我们的例子中,当某个活动完成/事件发生时,想要被告知的对象。)

如果查看接口文件的底部,您很可能会看到所需的XXXDelegate协议的定义 - 这用于定义委托类应该实现的可选和必需的方法。

答案 1 :(得分:2)

  

代表团是一个简单而有力的代表团   模式中的一个对象   程序代表或代表   与另一个对象协调。该   委托对象保持对引用的引用   另一个对象 - 委托 - 和   适当的时间发送消息   它。该消息通知   一个事件的代表   委托对象即将处理   或刚刚处理过。代表可以   通过更新来响应消息   本身或其他的外观或状态   应用程序中的对象,以及   在某些情况下,它可以返回一个值   影响即将发生的事件   处理。授权的主要价值   是它可以让你轻松   自定义几个行为   一个中心对象中的对象。   (source

代表应符合protocol

id<ADelegatesProtocol> delegate表示对象delegate需要符合protocol ADelegatesProtocol

答案 2 :(得分:1)

我发现解释这个的最简单方法是通过UIKit中的一个共同委托,比如UIAlertViewDelegate。这是一些示例代码:

在您的.h文件中,您会说您的类符合委托,如下所示:

@interface Foo : UIViewController <UIAlertViewDelegate> { // ...

这告诉编译器类Foo实现了委托的部分或全部方法。

实例化UIAlertView时,指定代理对象的内容:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" 
                                                message:@"Message"
                                               delegate:self
                                      cancelButtonTitle:@"Okay"
                                      otherButtonTitles:@"Cancel", nil];
[alert show];
[alert release];

请注意,我们说self是委托人。

现在,您想要实现必要的方法:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    NSLog(@"%d got clicked", buttonIndex);
}

对于UIAlertView,有一个id<UIAlertViewDelegate>类型的属性,将其与原始问题联系起来。

我是Objective-C / iPhone开发的新手,我发现超级有用的一件事是在类的“概述”部分中查找关联的xxxxDelegate。您必定会发现有用的(在其他语言中)用于常见操作的事件。

希望这有帮助!