Класс Objective-C определяет объект, который объединяет данные со связанным поведением. Иногда имеет смысл представлять одну задачу или единицу поведения, а не набор методов.
Блоки — это функция уровня языка, добавленная в C, Objective-C и C ++, которая позволяет создавать отдельные сегменты кода, которые можно передавать в методы или функции, как если бы они были значениями. Блоки — это объекты Objective-C, что означает, что они могут быть добавлены в коллекции, такие как NSArray или NSDictionary. Они также могут захватывать значения из окружающей области, делая их похожими на замыкания или лямбды в других языках программирования.
Синтаксис объявления простого блока
returntype (^blockName)(argumentType);
Простая реализация блока
returntype (^blockName)(argumentType)= ^{ };
Вот простой пример
void (^simpleBlock)(void) = ^{ NSLog(@"This is a block"); };
Мы можем вызвать блок, используя
simpleBlock();
Блоки принимают аргументы и возвращают значения
Блоки также могут принимать аргументы и возвращать значения так же, как методы и функции.
Вот простой пример для реализации и вызова блока с аргументами и возвращаемыми значениями.
double (^multiplyTwoValues)(double, double) = ^(double firstValue, double secondValue) { return firstValue * secondValue; }; double result = multiplyTwoValues(2,4); NSLog(@"The result is %f", result);
Блоки, использующие определения типов
Вот простой пример использования typedef в блоке. Обратите внимание, что этот пример пока не работает на онлайн-компиляторе . Используйте XCode, чтобы запустить то же самое.
#import <Foundation/Foundation.h> typedef void (^CompletionBlock)(); @interface SampleClass:NSObject - (void)performActionWithCompletion🙁CompletionBlock)completionBlock; @end @implementation SampleClass - (void)performActionWithCompletion🙁CompletionBlock)completionBlock { NSLog(@"Action Performed"); completionBlock(); } @end int main() { /* my first program in Objective-C */ SampleClass *sampleClass = [[SampleClass alloc]init]; [sampleClass performActionWithCompletion:^{ NSLog(@"Completion is called to intimate action is performed."); }]; return 0; }
Давайте скомпилируем и выполним его, он даст следующий результат —
2013-09-10 08:13:57.155 demo[284:303] Action Performed 2013-09-10 08:13:57.157 demo[284:303] Completion is called to intimate action is performed.
Блоки чаще используются в приложениях iOS и Mac OS X. Поэтому важнее понимать использование блоков.