iOS Internship 2014 Блоки в Objective-C
iOS Internship 2014Блоки в Objective-C
Objective-Cблоки
Блоки в Objective-C
Блок
● Функция
● Может иметь входные параметры
● Может возвращать значение
Блоки Objective-C
Блоки в Objective-C
Блок
● Функция
● Может иметь входные параметры
● Может возвращать значение
● Не имеет имени
● Является объектом
● Может ссылаться на свой контекст
● Может модифицировать свой контекст
● Может захватывать свой контекст
Блоки Objective-C
Блоки в Objective-C
Блок
● Функция
● Может иметь входные параметры
● Может возвращать значение
● Не имеет имени
● Является объектом
● Может ссылаться на свой контекст
● Может модифицировать свой контекст
● Может захватывать свой контекст
Блоки Objective-C
^ (int a, int b) {
return a + b;
}
Блоки в Objective-C
Блок
● Функция
● Может иметь входные параметры
● Может возвращать значение
● Не имеет имени
● Является объектом
● Может ссылаться на свой контекст
● Может модифицировать свой контекст
● Может захватывать свой контекст
Блоки Objective-Ctypedef int(^blockType)(int, int);
...
@property (strong) blockType myBlock;
...
blockType block = ^ (int a, int b) {
return a + b;
}
self.myBlock = block;
int resultA = block(3, 5);
int resultB = self.myBlock(3, 5);
Блоки в Objective-C
Блок
● Функция
● Может иметь входные параметры
● Может возвращать значение
● Не имеет имени
● Является объектом
● Может ссылаться на свой контекст
● Может модифицировать свой контекст
● Может захватывать свой контекст
Блоки Objective-C
int b;
...
^ (int a) {
return a + b;
}
Блоки в Objective-C
Блок
● Функция
● Может иметь входные параметры
● Может возвращать значение
● Не имеет имени
● Является объектом
● Может ссылаться на свой контекст
● Может модифицировать свой контекст
● Может захватывать свой контекст
Блоки Objective-C
__block int c;
...
^ (int a, int b) {
c = a + b;
}
Блоки в Objective-C
NSArray *a = ...;
int b = ...;
...
^ (int c) {
int index = a.count + c - b;
Object *obj = a[index];
...
}
Блок
● Функция
● Может иметь входные параметры
● Может возвращать значение
● Не имеет имени
● Является объектом
● Может ссылаться на свой контекст
● Может модифицировать свой контекст
● Может захватывать свой контекст
Блоки Objective-C
Блоки в Objective-C
NSArray *array;...NSUInteger maxElements = 5;[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"Element %d : %@", idx, obj); stop = idx >= maxElements;}];
Блоки Objective-C
Блоки в Objective-C
Блоки Objective-CNSArray *array;...NSUInteger maxElements = 5;[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"Element %d : %@", idx, obj); stop = idx >= maxElements;}];
- (void)enumerateObjectsUsingBlock:(void(^)(id obj, NSUInteger idx, BOOL *stop))block{ BOOL stop = NO; for (NSUInteger i = 0; i < self.count; i++) { block(self[i], i, &stop); if (stop) { return; } }}
NSArray.m
Блоки в Objective-C
Ссылки● Официальная документация 1
● Официальная документация 2
● Советы по использованию блоков