Основное отличие, которое я могу себе представить, состоит в том, что с блоками они действуют как замыкания, поэтому они фиксируют все переменные в области вокруг них. Это хорошо для случаев, когда у вас уже есть переменные и вы не хотите создавать переменную экземпляра просто для временного хранения этой переменной, чтобы селектор действий мог получить к ней доступ при запуске.
По отношению к коллекциям блоки имеют дополнительную возможность одновременного запуска, если в системе несколько ядер. В настоящее время в iPhone его нет, но в iPad 2 он есть, и вполне вероятно, что будущие модели iPhone будут иметь несколько ядер. Использование блоков в этом случае позволит вашему приложению автоматически масштабироваться в будущем.
В некоторых случаях блоки легче читать, потому что код обратного вызова находится рядом с кодом, который его вызывает. Конечно, это не всегда так, но иногда это просто облегчает чтение кода.
Извините, что отсылаю вас к документации, но для более полного обзора плюсов / минусов блоков, посмотрите на эту страницу .
Как говорит Apple:
Блоки представляют собой, как правило, небольшие, автономные фрагменты кода. Как таковые, они особенно полезны как средство инкапсуляции единиц работы, которые могут выполняться одновременно, или над элементами в коллекции, или как обратный вызов, когда другая операция завершена.
Блоки являются полезной альтернативой традиционным функциям обратного вызова по двум основным причинам:
Они позволяют писать код в точке вызова, которая выполняется позже в контексте реализации метода.
Таким образом, блоки часто являются параметрами каркасных методов.
Они разрешают доступ к локальным переменным.
Вместо того, чтобы использовать обратные вызовы, требующие структуры данных, которая содержит всю контекстную информацию, необходимую для выполнения операции, вы просто обращаетесь к локальным переменным напрямую.
На этой странице