0

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

@protocol MyDelegate
- (void)delegateMethod;
@end

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

谁能回答我为什么这个 < MyDelegate > 与实例变量声明一致?

4

2 回答 2

1

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

于 2013-04-19T16:09:16.297 回答
0

不清楚上面的 MyClass 应该是委托类、委托的用户还是“无辜的”第 3 方。

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

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

“无辜”的第 3 方可以接受和存储对其需求有意义的任何内容。大概它“知道”用户的意图(委托的用户不知道),因此存储“ClassOfThisApp”指针可能更有意义。

于 2013-04-19T16:26:56.540 回答