gpt4 book ai didi

ios - 需要帮助理解 objective-c block

转载 作者:行者123 更新时间:2023-11-28 20:28:52 25 4
gpt4 key购买 nike

这是来自 apple blocks docs我很难理解这一点,请任何人用简单的方式解释一下

...You can cast a block reference to a pointer of arbitrary type and vice versa. You cannot, however, dereference a block reference via the pointer dereference operator (*)—thus a block's size cannot be computed at compile time.

最佳答案

简单来说,一个 block 就是一个引用。 block 中的代码存储在内存中,可以通过变量访问。 void (^addingBlock)(int); 是一个 block 声明,可以通过 addingBlock 变量访问(例如,它可以像 addingBlock(5); 一样调用); ).

现在,这个引用可以转换为 C 识别的指针类型。有点像函数指针。正如文档所述,唯一的视觉差异是使用 * 而不是 ^。这意味着您可以将 block 转换为函数指针:

void (*funcPointer)(int) = (void(*)(int))addingBlock;

甚至是空指针(或任何类型!)

void* voidPtr = (void*)addingBlock;

但是您提供的引述是说,对于一个 block 的指针,您不能“取消引用”它。这意味着解释指针地址,并获取该地址后面的数据。无法执行此操作意味着您无法在编译时确定其大小。

为什么?因为 Obj-C 的动态性; block 的内容只能在运行时确定,而 C 在本质上是相当静态的,并且在编译时确定了很多。

关于ios - 需要帮助理解 objective-c block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13029925/

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