Главная » iPhone, Objective-C, Программирование для iOS и MacOS » Блоки Objective-C

0

Обратный вызов позволяет другим объектам вызывать методы ваших объектов в ответ на возникновение каких-либо событий. Хотя эти механизмы абсолютно работоспособны, они приводят к фрагментации кода. Части программы. которые вам хотелось бы держать рядом друг с другом для большей ясности, обычно оказываются удаленными друг от друга.

В Мас OS Х 10.6 и iOS 4 появилась новая возможность – так называемые блоки

(blоскs). Блок Objective-C представляет собой фрагмент кода (как и функция С), но он может передаваться в программе по аналогии сданными. Вскоре мы увидим, как это помогает хранить взаимосвязанный код по соседству.

Блоки и их синтаксис определенно относятся к числу нетривиальных аспектов

Objective-C, и на первый взгляд они кажутся довольно запутанными. Однако в АРI фирмы Apple блоки встречаются все чаще. В этой главе мы рассмотрим пару простых примеров, чтобы вы были готовы к встрече с ними.

Если У вас имеется опыт программирования на других языках, возможно, вы уже встречались с блоками под названиями анонимных функций, замыканий или лямбда-функций. Если вы знакомы с указателями на функции, блоки могут показаться чем-то похожим, но вскоре вы убедитесь, что при правильном использовании блоков код получается более элегантным, чем при использовании указателей на функции.

Определение  блоков

Блок выглядит так:

^{

NSLog(@"I’m a log statement within a block!");

}

Похоже на функции, но имя функции заменено символом «^». Этот символ идентифицирует следующий фрагмент кода как блок. Кроме того, блоки, как и функции, могут получать аргументы:

^(double dividend, double divisor) { double quotient = dividend / divisor; return quotient;

}

Этот блок получает аргументы – два значения типа dоublе. Блок также может иметь возвращаемое значение, но об этом чуть позднее.

Есть ли у блоков имена? Пока нет. Блок является значением (как, скажем, является значением число 5). Чтобы иметь возможность обращаться к блоку по имени, необходимо присвоить его блочной переменной.

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии