SlideShare a Scribd company logo
1 of 12
Download to read offline
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-C
typedef 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
● Советы по использованию блоков

More Related Content

What's hot

Обработка коллекций. Единая суть и множество проявлений
Обработка коллекций. Единая суть и множество проявленийОбработка коллекций. Единая суть и множество проявлений
Обработка коллекций. Единая суть и множество проявленийcorehard_by
 
указатель на функцию
указатель на функциюуказатель на функцию
указатель на функциюAleksandr Pavlenko
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++mcroitor
 
5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inlineDEVTYPE
 
6.3 Специализация шаблонов
6.3 Специализация шаблонов6.3 Специализация шаблонов
6.3 Специализация шаблоновDEVTYPE
 
Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)Mikhail Kurnosov
 

What's hot (6)

Обработка коллекций. Единая суть и множество проявлений
Обработка коллекций. Единая суть и множество проявленийОбработка коллекций. Единая суть и множество проявлений
Обработка коллекций. Единая суть и множество проявлений
 
указатель на функцию
указатель на функциюуказатель на функцию
указатель на функцию
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++
 
5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline
 
6.3 Специализация шаблонов
6.3 Специализация шаблонов6.3 Специализация шаблонов
6.3 Специализация шаблонов
 
Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
 

Viewers also liked

07 ns value
07   ns value07   ns value
07 ns valueNoveo
 
06 ns set
06   ns set06   ns set
06 ns setNoveo
 
11 ns copying, subscripting, fast enumeration
11   ns copying, subscripting, fast enumeration11   ns copying, subscripting, fast enumeration
11 ns copying, subscripting, fast enumerationNoveo
 
02 ns string
02   ns string02   ns string
02 ns stringNoveo
 
мультимедиа
мультимедиамультимедиа
мультимедиаNoveo
 
обработка событий
обработка событийобработка событий
обработка событийNoveo
 
шаринг
шарингшаринг
шарингNoveo
 
Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Noveo
 
Rest
RestRest
RestNoveo
 
10 ns error
10   ns error10   ns error
10 ns errorNoveo
 
03 коллекции
03   коллекции03   коллекции
03 коллекцииNoveo
 
iOS-05_2-UIKit
iOS-05_2-UIKitiOS-05_2-UIKit
iOS-05_2-UIKitNoveo
 
хранение данных
хранение данныххранение данных
хранение данныхNoveo
 
04 ns array
04   ns array04   ns array
04 ns arrayNoveo
 
iOS-01-Основы Objective-C
iOS-01-Основы Objective-CiOS-01-Основы Objective-C
iOS-01-Основы Objective-CNoveo
 
05 ns dictionary
05   ns dictionary05   ns dictionary
05 ns dictionaryNoveo
 
09 ns data
09   ns data09   ns data
09 ns dataNoveo
 
iOS-07_2 Multithreading
iOS-07_2 MultithreadingiOS-07_2 Multithreading
iOS-07_2 MultithreadingNoveo
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Noveo
 
карты, навигация
карты, навигациякарты, навигация
карты, навигацияNoveo
 

Viewers also liked (20)

07 ns value
07   ns value07   ns value
07 ns value
 
06 ns set
06   ns set06   ns set
06 ns set
 
11 ns copying, subscripting, fast enumeration
11   ns copying, subscripting, fast enumeration11   ns copying, subscripting, fast enumeration
11 ns copying, subscripting, fast enumeration
 
02 ns string
02   ns string02   ns string
02 ns string
 
мультимедиа
мультимедиамультимедиа
мультимедиа
 
обработка событий
обработка событийобработка событий
обработка событий
 
шаринг
шарингшаринг
шаринг
 
Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)
 
Rest
RestRest
Rest
 
10 ns error
10   ns error10   ns error
10 ns error
 
03 коллекции
03   коллекции03   коллекции
03 коллекции
 
iOS-05_2-UIKit
iOS-05_2-UIKitiOS-05_2-UIKit
iOS-05_2-UIKit
 
хранение данных
хранение данныххранение данных
хранение данных
 
04 ns array
04   ns array04   ns array
04 ns array
 
iOS-01-Основы Objective-C
iOS-01-Основы Objective-CiOS-01-Основы Objective-C
iOS-01-Основы Objective-C
 
05 ns dictionary
05   ns dictionary05   ns dictionary
05 ns dictionary
 
09 ns data
09   ns data09   ns data
09 ns data
 
iOS-07_2 Multithreading
iOS-07_2 MultithreadingiOS-07_2 Multithreading
iOS-07_2 Multithreading
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)
 
карты, навигация
карты, навигациякарты, навигация
карты, навигация
 

More from Noveo

Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииNoveo
 
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Noveo
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Noveo
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Noveo
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Noveo
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Noveo
 
Yii2
Yii2Yii2
Yii2Noveo
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизацияNoveo
 
PHP basic
PHP basicPHP basic
PHP basicNoveo
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP AdvancedNoveo
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQLNoveo
 
MySQL
MySQLMySQL
MySQLNoveo
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Noveo
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)Noveo
 
Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Noveo
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Noveo
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Noveo
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Noveo
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)Noveo
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Noveo
 

More from Noveo (20)

Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрии
 
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)
 
Yii2
Yii2Yii2
Yii2
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизация
 
PHP basic
PHP basicPHP basic
PHP basic
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP Advanced
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
MySQL
MySQLMySQL
MySQL
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)
 
Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
 

iOS-07_1 Objective-C Blocks

  • 3. Блоки в Objective-C Блок ● Функция ● Может иметь входные параметры ● Может возвращать значение Блоки Objective-C
  • 4. Блоки в Objective-C Блок ● Функция ● Может иметь входные параметры ● Может возвращать значение ● Не имеет имени ● Является объектом ● Может ссылаться на свой контекст ● Может модифицировать свой контекст ● Может захватывать свой контекст Блоки Objective-C
  • 5. Блоки в Objective-C Блок ● Функция ● Может иметь входные параметры ● Может возвращать значение ● Не имеет имени ● Является объектом ● Может ссылаться на свой контекст ● Может модифицировать свой контекст ● Может захватывать свой контекст Блоки Objective-C ^ (int a, int b) { return a + b; }
  • 6. Блоки в Objective-C Блок ● Функция ● Может иметь входные параметры ● Может возвращать значение ● Не имеет имени ● Является объектом ● Может ссылаться на свой контекст ● Может модифицировать свой контекст ● Может захватывать свой контекст Блоки Objective-C typedef 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);
  • 7. Блоки в Objective-C Блок ● Функция ● Может иметь входные параметры ● Может возвращать значение ● Не имеет имени ● Является объектом ● Может ссылаться на свой контекст ● Может модифицировать свой контекст ● Может захватывать свой контекст Блоки Objective-C int b; ... ^ (int a) { return a + b; }
  • 8. Блоки в Objective-C Блок ● Функция ● Может иметь входные параметры ● Может возвращать значение ● Не имеет имени ● Является объектом ● Может ссылаться на свой контекст ● Может модифицировать свой контекст ● Может захватывать свой контекст Блоки Objective-C __block int c; ... ^ (int a, int b) { c = a + b; }
  • 9. Блоки в Objective-C NSArray *a = ...; int b = ...; ... ^ (int c) { int index = a.count + c - b; Object *obj = a[index]; ... } Блок ● Функция ● Может иметь входные параметры ● Может возвращать значение ● Не имеет имени ● Является объектом ● Может ссылаться на свой контекст ● Может модифицировать свой контекст ● Может захватывать свой контекст Блоки Objective-C
  • 10. Блоки в 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
  • 11. Блоки в 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
  • 12. Блоки в Objective-C Ссылки ● Официальная документация 1 ● Официальная документация 2 ● Советы по использованию блоков