【发布时间】:2013-12-13 01:19:07
【问题描述】:
我想将 Objective-c 块保存到文件(或任何其他存储,例如 FTP 服务器)中,然后从那里加载并执行它。
从Blocks Programming Guide > Using Blocks > Copying Blocks,我知道块可以存储在堆中。因为存储在那里的任何内容都可以修改,所以我认为可以从堆中读取和写入任意内容并将数据视为块。
我的问题是,如何将块保存到文件中?我什至不知道它的结构是什么/它覆盖了多少字节。我非常怀疑做一个 sizeof() 然后读/写尽可能多的字节就足够了。请帮助我找到从内存读取和写入块的起点,并了解它们是如何组成的。
让我们从这段代码开始:
void (^myBlock)(void) = ^{ printf("Hello, I'm a Block\n"); };
printf("block size: %lu\n", sizeof(myBlock));
myBlock();
输出:
block size: 4
Hello, I'm a Block
您可以想象,如果这可行,一长串引人入胜的概念可以在 iOS 中实现。仅举几例:
- 动态从 Web 下载可执行代码(作为块),将其存储在堆中并执行它,从而使动态链接库在 iOS 中成为可能。从这个想法出发,产生了更多的可能性,在这里写得太多了。
- 在应用程序内编译代码并立即执行,从而在 iOS 应用程序中启用任何类型的本机执行脚本语言。
- 在运行时在 iOS 的机器级别上操作代码。这是人工智能和进化/随机算法的重要主题。
【问题讨论】:
标签: objective-c heap-memory objective-c-blocks