Я хотел бы сохранить блок объектива-c в файл (или любое другое хранилище, например FTP-сервер), а затем загрузить его оттуда и выполнить его.Можно ли сохранить объект-c-блок в файл, а затем прочитать его оттуда, чтобы его использовать?
От 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.
- Манипулирование кодом во время выполнения на уровне машины в iOS. Это важная тема для ИИ и эволюционных/случайных алгоритмов.
Вы правы, исполняемый код остается в области кода ОЗУ, и попытка изменить его приводит к EXC_BAD_ACCESS.Только параметры блока передаются в области доступной записи. –