正如标题所述,我希望了解共享实现意味着什么。更具体地说,我想知道 HOW 它的工作原理。我明白这些词的意思,但我不清楚它是如何运作的过程。
实施例。 “快速枚举实现在Objective-C运行时和Foundation框架之间共享。”
这是Apple的Cocoa Fundamentals doc。我正在阅读并遇到这条线,并试图了解这个过程。
由于
答案 0 :(得分:2)
这基本上涵盖了一种有点矛盾的编程模式(在我看来,这是错误的):Objective-C语言,libobjc
运行时库和Foundation框架没有严格分开。例如,一些基本消息名称(例如retain
,release
等)被硬编码到Objective-C运行时库中(例如,为了将ARC识别为特殊的内存管理相关的顺序)消息),这也是快速枚举的情况。
countByEnumeratingWithState:objects:count:
选择器被编译器识别,并在遇到for (object in collection)
语法时发出。然后,集合实现此协议NSFastEnumeration
的硬连线消息的集合对象,根据运行时库的方式更新count
,objects
,其返回值等。 ABI期待它。
由于历史原因,这三种东西(语言/编译器,运行时库和Foundation框架)之间存在如此紧密的耦合,这种硬编码方法是可用的和现实的,但它也是一个很糟糕的东西违反语言和图书馆的分离。我甚至敢说这是一个非常糟糕的黑客。