我有一个关于 Objective-C 代表的问题。当我使用委托创建类时,我的代码如下所示:
@protocol MyDelegate
- (void)delegateMethod;
@end
@interface MyClass:NSObject {
id <MyDelegate> delegate;
}
谁能回答我为什么这个 < MyDelegate > 与实例变量声明一致?
我有一个关于 Objective-C 代表的问题。当我使用委托创建类时,我的代码如下所示:
@protocol MyDelegate
- (void)delegateMethod;
@end
@interface MyClass:NSObject {
id <MyDelegate> delegate;
}
谁能回答我为什么这个 < MyDelegate > 与实例变量声明一致?
它只是意味着delegate
变量(无论它的实际类型是什么)符合MyDelegate
协议。
不清楚上面的 MyClass 应该是委托类、委托的用户还是“无辜的”第 3 方。
当然,委托对象不需要存储指向自身的指针。
委托的用户(调用者)一般需要存储委托指针。它实际上可能需要您创建某个委托类的子类,因此需要您传递“MyDelegateClass”的子类。在这种情况下,它将存储一个指向“MyDelegateClass”的指针。但是为了允许您将您的委托与您的一个类中的其他功能结合起来(并且通常最小化委托的用户和委托用户的客户之间的绑定“紧密性”),委托通常是通过协议而不是类来定义的, 在这种情况下,给定协议的对象的 Objective-C 表示法是id <TheProtocol>
.
“无辜”的第 3 方可以接受和存储对其需求有意义的任何内容。大概它“知道”用户的意图(委托的用户不知道),因此存储“ClassOfThisApp”指针可能更有意义。