Как блоки отличаются от обычных методов и функций в Objective-C?

В чем преимущество использования блоков над обычными методами и функциями в Objective-C? Я прочитал документацию, но я не могу найти конкретное использование блоков вместо других языковых функций.

Я уверен, что что-то пропустил, так кто-нибудь может объяснить преимущества блоков проще, чем существующая документация?

Ответы

Ответ 1

Мне нравится Apple "Краткое практическое руководство по блокам" как введение в концепцию.

Кроме того, почти все ресурсы, на которые ссылается в ответ на вопрос "Рекомендуемые ресурсы для изучения блоков в Snow Leopard" , будут применяться здесь.

В дополнение к ресурсам там я рекомендую статьи "Cocoa для ученых (часть XXVII): закрытие с помощью Objective-C" и "Cocoa для ученых (XXXIII): 10 использует для блоков в C/ Objective-C" Дрю Маккормак, а также как "Программирование с помощью C блоков" от Joachim Bengtsson.

WWDC 2010 видео для сеансов 206 - "Знакомство с блоками и Grand Central Dispatch на iPhone" и 211 - "Упрощение разработки приложений для iPhone с помощью Grand Central Dispatch" тоже стоит посмотреть.

Ответ 2

Блоки - это способ обернуть кусок кода и эффективно сохранить его для последующего использования. Вместо функции обратного вызова обычно используется блок. Новые API-интерфейсы в iPhone SDK используют блоки таким образом. API возьмет "блок" кода, который будет запущен по завершении.

Это избавляет вас от необходимости создавать собственные потоки и поддерживать состояние каждого потока, управлять блокировками, настраивать пулы автозапуска и т.д.

При использовании с блоками API Grand Central Dispatch (GCD) API могут выполняться в очередях, и все части кода могут выполняться для асинхронного запуска с минимальными усилиями, но при этом сохраняя надежность, требуемую для многопоточного кода.