Objective c 为什么某些Apple框架协议不符合<;NSObject>;?

Objective c 为什么某些Apple框架协议不符合<;NSObject>;?,objective-c,protocols,Objective C,Protocols,许多SDK定义的协议,例如UITableViewDelegate,都符合NSObject协议。有些,如NSFastEnumeration,则没有 有人知道为什么会这样吗 我能马上想到的是,Apple可能已经预料到,从非NSObject的根类继承的类(例如NSProxy)可能需要符合NSFastEnumeration之类的协议,但(例如)UITableViewDelegate除外。但两者之间的区别并不明显。委托类型协议倾向于符合NSObject。更多像NSCopying这样的“纯”协议没有。至于原

许多SDK定义的协议,例如UITableViewDelegate,都符合NSObject协议。有些,如NSFastEnumeration,则没有

有人知道为什么会这样吗


我能马上想到的是,Apple可能已经预料到,从非NSObject的根类继承的类(例如NSProxy)可能需要符合NSFastEnumeration之类的协议,但(例如)UITableViewDelegate除外。但两者之间的区别并不明显。

委托类型协议倾向于符合NSObject。更多像NSCopying这样的“纯”协议没有。至于原因,我的假设只是因为他们希望复制、锁定和快速枚举等协议尽可能简单,而对于委托,您总是希望更多的标准对象功能,如
响应选择器:

委托类型协议倾向于符合NSObject。更多像NSCopying这样的“纯”协议没有。至于原因,我的假设只是因为他们希望复制、锁定和快速枚举等协议尽可能简单,而对于委托,您总是希望更多的标准对象功能,如
respondsToSelector:

进一步证明这一点的是,即使是新创建的“低级别”像
这样的协议不符合
,虽然更旧,但像
这样的高级协议符合。当然,在某些方面,我将“低水平”定义为“那些不符合
的”,但总的来说,这种理念似乎是遵循的。例如,将
进行比较,想想每个对象可能是什么类型的对象。@RobNapier:我认为“低级”的更好定义是“定义对象可以实现的特定行为”,而“高级”协议更像“定义对象可以填充的应用程序中的角色”这就是我试图用“纯”这个词来表达的意思——它们只是指定了一种与具有特定特征的物体交谈的统一方式,而不是在更大的设计中定义一个位置。这很有意义。(微观)行为与(宏观)角色的区别是合理的。我对这个问题进行了编辑,使它更一般一些。考虑到符合NSCopying等人的类实际上几乎都是通过继承非正式地实现的,这种区别似乎主要是一个文档问题。奇怪的是,苹果没有以某种方式提出这一点。进一步的证据是,即使是像
这样的新创建的“低级”协议也不符合
,而像
这样的高级协议则要旧得多。当然,在某些方面,我将“低水平”定义为“那些不符合
的”,但总的来说,这种理念似乎是遵循的。例如,将
进行比较,想想每个对象可能是什么类型的对象。@RobNapier:我认为“低级”的更好定义是“定义对象可以实现的特定行为”,而“高级”协议更像“定义对象可以填充的应用程序中的角色”这就是我试图用“纯”这个词来表达的意思——它们只是指定了一种与具有特定特征的物体交谈的统一方式,而不是在更大的设计中定义一个位置。这很有意义。(微观)行为与(宏观)角色的区别是合理的。我对这个问题进行了编辑,使它更一般一些。考虑到符合NSCopying等人的类实际上几乎都是通过继承非正式地实现的,这种区别似乎主要是一个文档问题。奇怪的是,苹果并没有以某种方式说出这一点。