,但我无法在任何地方找到解释。
id delegate
RoomDelegate是一个班级。这里发生了什么?
答案 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
。您必定会发现有用的(在其他语言中)用于常见操作的事件。
希望这有帮助!