1

正如标题所述,我希望了解共享实现意味着什么。更具体地说,我想知道它是如何工作的。我明白这些词的意思,但我不清楚它是如何工作的。

前任。“快速枚举实现在 Objective-C 运行时和 Foundation 框架之间共享。”

这是来自 Apple 的 Cocoa Fundamentals 文档。我正在阅读并遇到这条线,并试图了解这个过程。

谢谢

4

1 回答 1

2

这基本上涵盖了一种有点矛盾的编程模式(在我看来,这是错误的):Objective-C 语言、libobjc运行时库和 Foundation 框架没有严格分开。例如,一些基本的消息名称,如retainrelease等,被硬编码到 Objective-C 运行时库中(例如,为了 ARC 将它们识别为特殊的内存管理相关消息),这就是快速枚举也是如此。

选择countByEnumeratingWithState:objects:count:器被编译器识别,并在for (object in collection)遇到语法时发出。然后是集合对象,该类根据运行时库和 ABI 对它的期望如何实现协议的这个硬连线消息,NSFastEnumeration更新它的返回值等。countobjects

由于历史原因,这三件事(语言/编译器、运行时库和 Foundation 框架)之间存在如此紧密的耦合,以至于这种硬编码方法是可用且现实的,但它也严重违反了语言分离和图书馆。我什至敢说这是一个非常肮脏的hack。

于 2013-04-02T13:03:59.133 回答