gpt4 book ai didi

objective-c - Obj-C 中的 id 和委托(delegate)用法

转载 作者:可可西里 更新时间:2023-11-01 03:37:40 24 4
gpt4 key购买 nike

我想知道下面这行代码在做什么:

@property (assign, nonatomic) id <CoursePlannerDelegate> delegate;

也就是说,我想知道该行的这一部分:

id <CoursePlannerDelegate> delegate;

它也出现在其他地方:

@interface CategoryAddViewController : UIViewController {

UITextField *nameField, *weightField;
double maxWeight; //The maximum weight that can be allocated to this Category (max value of 100)
id <CategoryAddDelegate> delegate; //A Course Planner TVC

}

最佳答案

JustSid 的回答是正确的,但只是做了更多说明:

与其他 OO 语言相比,Objective-C 缺少接口(interface)。相反,Objective-C 使用由 @protocol 指令标记的协议(protocol)。

id 数据类型是一个匿名对象。它是一个 Objective-C 对象——这对编译器来说是确定的。编译器知道为指向对象的指针保留多少空间,但它在编译时不知道它是 NSStringUIViewController 还是什么。

因此,当您使用 id 类型时,您可以指定(在尖括号中)该匿名对象应遵守的协议(protocol)。

在您上面的代码中,编译时,编译器将检查您设置为 CategoryAddViewController 委托(delegate)的任何对象,并仔细检查您是否已实现协议(protocol)中定义的任何必需方法。

总而言之,当您使用 id 类型时使用尖括号将有助于编译器在您做一些愚蠢的事情时告诉您。

所有这些都是针对编译时的——如果您在运行时也需要 100% 偏执,您可以使用 conformsToProtocol:@protocol(foo) 来测试合规性(我相信这是任何 NSObject 上的方法)。

关于objective-c - Obj-C 中的 id 和委托(delegate)用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4531978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com