четвер, 7 лютого 2013 р.

Работа с блоками

Со временем любому iOS-разработчику наскучит создавать свои синглтоны, которые взаимодействуют с остальными классами через Delegate. Пришло время использовать блоки.

Для справки: блоки появились впервые на Mac OS 10.6 и iOS 4.0, однако многие iOS-разработчики игнорируют этот факт.

Чем же хороши блоки и зачем их использовать? Разумеется в них нет необходимости, потому что всегда найдется способ заменить блок. Но такой способ не всегда будет правильным с точки зрения удобности и дружелюбности кода.

Рассмотрим простейший пример взаимодействия блока.

Я создал синглтон, содержащий в себе блок, и назвал его просто и понятно DPHelperWithBlock.

DPHelperWithBlock.h

//объявляем тип блока (возвращаемое значение булевая переменная, в качестве параметра строка)
typedef BOOL (^DPResultBlock) (NSString *result);

@interface DPHelperWithBlock : NSObject

//объявляем блок
@property (nonatomic, copy) DPResultBlock resultBlock;

//метод, который вызовет блок
- (void)startBlockWorking;

 

DPHelperWithBlock.m

#import "DPHelperWithBlock.h"

@implementation DPHelperWithBlock

#pragma mark — Init method

- (id)init {
    if (self = [super init]) {
    }
    return self;
}

//реализация метода, который вызовет блок
- (void)startBlockWorking {
    //вызов блока, передаем параметром строку «Hello!»
    _resultBlock(@"Hello!");
}

@end

Что будет после вызова блока? Куда мы попадем? А попадем мы туда, где находится реализация данного блока. Реализовать его можно в любом классе:

//инициализация объекта
DPHelperWithBlock *myHelperWithBlock = [DPHelperWithBlock new];

//реализация блока
myHelperWithBlock.resultBlock = ^(NSString *result){
    //сюда мы попадаем сразу же после вызова блока, переменная result будем содержать «Hello!»
    NSLog(@"result = %@", result);
    
    //возвращаем значение
    return YES;
};

//вызываем метод, вызывающий блок
[myHelperWithBlock startBlockWorking];

Таким образом мы создали общение между классами без использование Делегатов.

Немає коментарів:

Дописати коментар

HyperComments for Blogger

comments powered by HyperComments