Это блоки, которые добавляют анонимные функции и функциональные объекты в Objective-C. Смотрите, например Представляем блоки и Grand Central Dispatch :
Блочные объекты (неофициально, «блоки») являются расширением C, а также Objective-C и C ++, которые позволяют программистам определять автономные единицы работы. Блоки похожи - но гораздо более мощны, чем - традиционные указатели функций. Ключевые различия:
- Блоки могут быть встроены как «анонимные функции».
- Блоки захватывают копии локальных переменных только для чтения, аналогично «замыканиям» в других языках
Объявление переменной блока:
void (^my_block)(void);
Назначение ему блочного объекта:
my_block = ^(void){ printf("hello world\n"); };
Вызов:
my_block(); // prints “hello world\n”
Принятие блока в качестве аргумента:
- (void)doSomething:(void (^)(void))block;
Использование этого метода со встроенным блоком:
[obj doSomeThing:^(void){ printf("block was called"); }];