Я вижу как минимум две проблемы с вашим кодом.
Во-первых, блоки на основе стека (например, два, которые вы определяете в своем коде) не будут сохраняться автоматически, когда вы передаете их в коллекцию. Поэтому, скорее всего, когда вы захотите выполнить блок, ваше приложение рухнет. Это очень хорошо объяснено в ответе на вопрос, указанный @Josh в комментариях: Блок снимается в NSDictionary (ARC). Вы должны использовать метод копирования для блока, чтобы создать копию в куче, которую может сохранить ARC.
Во-вторых, после того, как вы вставили методы копирования, у вас будет цикл сохранения. Ваш объект "self" сохраняет словарь commandTable, словарь сохранит ваши блоки (это ваше намерение, вы не хотите, чтобы ваши блоки исчезли), и поскольку вы используете один и тот же объект "self" в блоках, ваши блоки сохранятся. ваш объект «я». Чтобы избежать этого, определите локальную переменную __weak для вашего объекта «я», как также описано в документе Работа с блоками глава документации:
MyClass* __weak weakSelf = self;
self.commandTable = [@{
@"command1" : ^(id value) { return [weakSelf runCommand1:value]; },
@"command2" : ^(id value) { return [weakSelf runCommand2:value]; },
} mutableCopy];
В противном случае ваш шаблон может работать хорошо.
person
MrTJ
schedule
20.02.2014