gpt4 book ai didi

objective-c - 编译时 block 会发生什么情况,我可以在运行时创建一个 block 吗?

转载 作者:行者123 更新时间:2023-12-02 05:05:34 25 4
gpt4 key购买 nike

这是一个关于 Objective-C 中的 block (^{}) 的两部分问题。我已经搜索了一些答案,但在 Google 或 SO 中没有出现任何内容。这个问题源于希望为 iOS 创建自定义 XML 布局引擎,支持 block - 这意味着我想解析 NSStrings 并在运行时创建 block 。

1) 这可能吗?如果可以,如何实现?

NSString to Block 上找不到太多信息,我认为原因可能是编译器如何处理 block - 所以我再次搜索答案但空手而归.所以:

2) 在 Objective-C 中编译时 block 会发生什么?

最佳答案

一个 block 是两件事;在执行通过 block 时捕获的大量可执行代码和状态。

即给出:

 myBlock = ^{ return someVariable + someOtherVariable; };

编译后,这会创建一段代码,其行为非常类似于将两个变量相加并返回结果的函数。没有创建 block 实例。

执行时,当计算表达式 myBlock = ^{...}; 时,会创建一个 block 实例。在该 block 实例中是对编译器创建的代码的引用以及在对 myBlock 进行赋值时 两个变量中包含的值的副本(除非,当然,__block 正在发挥作用,等等...)。

这回答了 (2),但与回答 (1) 相关。

在运行时,您可以整天创建现有的、已编译的 block 的实例。但是,您不能创建新的种类 block 。这样做需要一个编译器,并且仅限于可以编译新的可执行代码并实际执行它的运行时环境。

关于objective-c - 编译时 block 会发生什么情况,我可以在运行时创建一个 block 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16323089/

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