gpt4 book ai didi

C 中的 Objective-C block

转载 作者:太空狗 更新时间:2023-10-30 03:41:32 25 4
gpt4 key购买 nike

在阅读 Apple Docs 中的 block 概念概述时,我看到了下面的语句:

Although blocks are available to pure C and C++, a block is also always an Objective-C object.

这怎么可能?我的意思是在纯 C 中可用的 Objective-C 对象。我感到困惑。

最佳答案

How is this possible? I mean an Objective-C object available in pure C.

Matt Gallagher 写道 an article that nicely explains how blocks work .简而言之, block 被定义为满足成为有效 Objective-C 对象要求的结构(例如,结构以 isa 指针开头)。这些都不会对 C 造成问题,并且编译器知道 block 的定义是什么,因此即使在编译普通的旧 C 时,它仍然可以做正确的事情来使 block 工作。

添加的 block 的 Objective-C 方面不会影响 block 在 C 中的使用方式,但仍然提供将 block 视为对象的能力,以便它们可以添加到集合中,或者像其他任何对象一样进行管理。

这其实并不奇怪。如果您考虑一下,所有 Objective-C 对象在某种程度上在 C 中都是“可用的”——entire Objective-C runtime由 C 函数组成,这些函数操纵表示 Objective-C 对象和类的结构。即使忽略这一点, block 也不是第一个在 C 和 Objective-C 中都可用的数据类型的例子——我们有 toll free bridging在Foundation和Core Foundation之间徘徊多年。 block 的实现可能有些不同,但拥有可在两个世界中工作的对象并不是什么新鲜事。

关于C 中的 Objective-C block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22539333/

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