Концептуальный обзор
Блочные объекты обеспечивают способ для Вас создать оперативное тело функции как выражение в C и языки C-derived, такие как Objective C и C++. На других языках и средах, блочный объект иногда также вызывают «закрытием». Здесь, они обычно именуются в разговорной речи как «блоки», если нет объем для беспорядка со стандартом C срока для блока кода.
Блочная функциональность
Блок является анонимным встроенным набором кода что:
Имеет введенный список аргументов точно так же, как функция
Имеет выведенный или объявленный тип возврата
Может получить состояние от лексического контекста, в котором оно определяется
Может дополнительно изменить состояние лексического контекста
Может совместно использовать потенциал для модификации с другими блоками, определенными в том же лексическом контексте
Может продолжать совместно использовать и изменять состояние, определенное в лексическом контексте (стековый фрейм) после того, как был уничтожен лексический контекст (стековый фрейм)
Можно скопировать блок и даже передать его другим потокам для задержанного выполнения (или, в его собственном потоке, к runloop). Компилятор и расположение во время выполнения, что все переменные, на которые ссылаются от блока, сохраняются для жизни всех копий блока. Несмотря на то, что блоки доступны чистому C и C++, блок является также всегда объектом Objective C.
Использование
Блоки представляют обычно маленькие, автономные части кода. Также, они особенно полезны как средние значения инкапсуляции единиц работы, которые могут быть выполнены одновременно, или по элементам в наборе, или как обратный вызов, когда закончилась другая работа.
Блоки являются полезной альтернативой традиционным функциям обратного вызова по двум главным причинам:
Они позволяют Вам писать код при вызове, выполняющемся позже в контексте реализации метода.
Блоки являются таким образом часто параметрами методов платформы.
Они предоставляют доступ к локальным переменным.
Вместо того, чтобы использовать обратные вызовы, требующие структуры данных, воплощающей всю контекстную информацию, необходимо выполнить работу, Вы просто локальные переменные доступа непосредственно.