12
iOS Internship 2014 Блоки в Objective-C

iOS-01-Основы Objective-C

  • Upload
    noveo

  • View
    249

  • Download
    3

Embed Size (px)

Citation preview

Page 1: iOS-01-Основы Objective-C

iOS Internship 2014Блоки в Objective-C

Page 2: iOS-01-Основы Objective-C

Objective-Cблоки

Page 3: iOS-01-Основы Objective-C

Блоки в Objective-C

Блок

● Функция

● Может иметь входные параметры

● Может возвращать значение

Блоки Objective-C

Page 4: iOS-01-Основы Objective-C

Блоки в Objective-C

Блок

● Функция

● Может иметь входные параметры

● Может возвращать значение

● Не имеет имени

● Является объектом

● Может ссылаться на свой контекст

● Может модифицировать свой контекст

● Может захватывать свой контекст

Блоки Objective-C

Page 5: iOS-01-Основы Objective-C

Блоки в Objective-C

Блок

● Функция

● Может иметь входные параметры

● Может возвращать значение

● Не имеет имени

● Является объектом

● Может ссылаться на свой контекст

● Может модифицировать свой контекст

● Может захватывать свой контекст

Блоки Objective-C

^ (int a, int b) {

return a + b;

}

Page 6: iOS-01-Основы Objective-C

Блоки в 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);

Page 7: iOS-01-Основы Objective-C

Блоки в Objective-C

Блок

● Функция

● Может иметь входные параметры

● Может возвращать значение

● Не имеет имени

● Является объектом

● Может ссылаться на свой контекст

● Может модифицировать свой контекст

● Может захватывать свой контекст

Блоки Objective-C

int b;

...

^ (int a) {

return a + b;

}

Page 8: iOS-01-Основы Objective-C

Блоки в Objective-C

Блок

● Функция

● Может иметь входные параметры

● Может возвращать значение

● Не имеет имени

● Является объектом

● Может ссылаться на свой контекст

● Может модифицировать свой контекст

● Может захватывать свой контекст

Блоки Objective-C

__block int c;

...

^ (int a, int b) {

c = a + b;

}

Page 9: iOS-01-Основы Objective-C

Блоки в Objective-C

NSArray *a = ...;

int b = ...;

...

^ (int c) {

int index = a.count + c - b;

Object *obj = a[index];

...

}

Блок

● Функция

● Может иметь входные параметры

● Может возвращать значение

● Не имеет имени

● Является объектом

● Может ссылаться на свой контекст

● Может модифицировать свой контекст

● Может захватывать свой контекст

Блоки Objective-C

Page 10: iOS-01-Основы 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

Page 11: iOS-01-Основы 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