Objective-C委托表示法

时间:2013-04-19 16:02:09

标签: objective-c delegates

我有一个关于Objective-C代表的问题。当我使用委托创建类时,我的代码如下所示:

@protocol MyDelegate
- (void)delegateMethod;
@end

@interface MyClass:NSObject {
    id <MyDelegate> delegate;
}

有人可以回答我为什么这是&lt; MyDelegate &gt;在实例变量声明的行中?

2 个答案:

答案 0 :(得分:1)

这只是意味着delegate变量(无论它的实际类型是什么),都符合MyDelegate协议。

答案 1 :(得分:0)

上述MyClass是否应该是代表类,代表的用户或“无辜的”第三方还不是很清楚。

当然,委托对象不需要存储指向自身的指针。

委托的用户(调用者)通常需要存储委托指针。它实际上可能需要您创建某个委托类的子类,因此需要您传递“MyDelegateClass”的子类。在这种情况下,它会存储一个指向“MyDelegateClass”的指针。但是为了允许您将您的委托与您的一个类中的其他函数组合(并且通常最小化委托的用户和委托用户的客户端之间的绑定的“紧密性”),委托通常通过协议而不是类来定义,在这种情况下,给定协议的对象的Objective-C表示法是id <TheProtocol>

“无辜的”第三方可以接受和存储任何对其需求有意义的东西。据推测,它“知道”用户的意图(代表的用户没有),因此存储“ClassOfThisApp”指针可能更有意义。