- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想知道下面这行代码在做什么:
@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 对象——这对编译器来说是确定的。编译器知道为指向对象的指针保留多少空间,但它在编译时不知道它是 NSString
、UIViewController
还是什么。
因此,当您使用 id
类型时,您可以指定(在尖括号中)该匿名对象应遵守的协议(protocol)。
在您上面的代码中,编译时,编译器将检查您设置为 CategoryAddViewController 委托(delegate)的任何对象,并仔细检查您是否已实现协议(protocol)中定义的任何必需方法。
总而言之,当您使用 id
类型时使用尖括号将有助于编译器在您做一些愚蠢的事情时告诉您。
所有这些都是针对编译时的——如果您在运行时也需要 100% 偏执,您可以使用 conformsToProtocol:@protocol(foo)
来测试合规性(我相信这是任何 NSObject 上的方法)。
关于objective-c - Obj-C 中的 id 和委托(delegate)用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4531978/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
我有实体: @Entity @Table(name = "CARDS") public class Card { @ManyToOne @JoinColumn(name = "PERSON_I
我正在尝试计算二维多边形的表面法线。我正在使用 OpenGL wiki 中的 Newell 方法来计算表面法线。 https://www.opengl.org/wiki/Calculating_a_S
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 7 年前。 Improve
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我这里有以下 XML: Visa, Mastercard, , , , 0, Discover, American Express siteonly, Buyer Pay
即将发生的 Google 政策变更迫使我们实现一个对话框,以通知欧盟用户有关 Cookie/设备标识符用于广告和分析的情况。我只想向欧盟用户显示此对话框。我不想使用额外的权限(例如 android.p
本文分享自华为云社区《华为大咖说 | 企业应用AI大模型的“道、法、术” ——道:认知篇》,作者:华为云PaaS服务小智。 本期核心观点 上车:AGI是未来5~10年内,每个人都无法回避的技
我有一个与酒精相关的网站,需要先验证年龄,然后才能让他们进入该网站。我使用 HttpModule 来执行此操作,该模块检查 cookie,如果未设置,我会将它们重定向到验证页面。我验证他们的年龄并存储
在欧盟,我们有一项法律,要求网页请求存储 cookie 的许可。我们大多数人都了解 cookie 并同意它们,但仍然被迫在任何地方明确接受它们。所以我计划编写这个附加组件(ff & chrome),它
以下在 C 和/或 C++ 中是否合法? void fn(); inline void fn() { /*Do something here*/ } 让我担心的是,第一个声明看起来暗示函数将被定义
我是一名优秀的程序员,十分优秀!