Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

@interface AppDelegate 

@property (nonatomic, strong) NSOperationQueue *operationQueue;

@property (nonatomic, strong) SimpleOperation *firstOperation;

@property (nonatomic, strong) SimpleOperation *secondOperation;

@end

@implementation AppDelegate

Реализация делегата приложения такова:

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

NSNumber *firstNumber = @111;

NSNumber *secondNumber = @222;

self.firstOperation = [[SimpleOperation alloc]

initWithObject: firstNumber];

self.secondOperation = [[SimpleOperation alloc]

initWithObject: secondNumber];

self.operationQueue = [[NSOperationQueue alloc] init];

/* Добавляем
операции в очередь. */

[self.operationQueue addOperation: self.firstOperation];

[self.operationQueue addOperation: self.secondOperation];

NSLog(@"Main thread is here");

self.window = [[UIWindow alloc] initWithFrame:

[[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

В окне консоли отобразятся результаты, подобные уже виденным ранее — тем, которые мы получали при применении параллельных инициирующих операций:

Main thread is here

– [SimpleOperation main]

– [SimpleOperation main]

Parameter Object = 222

Parameter Object = 222

Main Thread = <NSThread: 0x68 10260>{name = (null), num = 1}

Main Thread = <NSThread: 0x68 10260>{name = (null), num = 1}

Current Thread = <NSThread: 0x6a10b90>{name = (null), num = 3}

Current Thread = <NSThread: 0x6a13f50>{name = (null), num = 4}

См. также

Разделы 7.11 и 7.15.

7.13. Создание зависимости между операциями

Постановка задачи

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

Решение

Если операция B может начать выполнение содержащейся в ней задачи только после того, как операция A выполнит свою задачу, то операция B должна добавить

к себе операцию A в качестве зависимой. Это делается с помощью метода экземпляра addDependency:, относящегося к классу NSOperation:

[self.firstOperation addDependency: self.secondOperation];

Свойства firstOperation и secondOperation относятся к типу NSInvocationOperation, подробнее об этом мы поговорим в подразделе «Обсуждение» данного раздела. В приведенном примере кода первая операция, находящаяся в операционной очереди, не будет выполняться до тех пор, пока не будет выполнена задача второй операции.

Обсуждение

Выполнение операции не начинается до тех пор, пока не будут успешно завершены все операции, от которых она зависит. По умолчанию после инициализации операция не связана зависимостями с какими-либо другими операциями.

Если мы хотим внедрить зависимости в пример с кодом, описанный в разделе 7.12, то можем немного изменить реализацию делегата приложения и воспользоваться методом экземпляра addDependency:, чтобы первая операция дождалась окончания выполнения второй операции:

#import «AppDelegate.h»

@interface AppDelegate 

@property (nonatomic, strong) NSInvocationOperation *firstOperation;

@property (nonatomic, strong) NSInvocationOperation *secondOperation;

@property (nonatomic, strong) NSOperationQueue *operationQueue;

@end

@implementation AppDelegate

— (void) firstOperationEntry:(id)paramObject{

NSLog(@"First Operation — Parameter Object = %@",

paramObject);

NSLog(@"First Operation — Main Thread = %@",

[NSThread mainThread]);

NSLog(@"First Operation — Current Thread = %@",

[NSThread currentThread]);

}

— (void) secondOperationEntry:(id)paramObject{

NSLog(@"Second Operation — Parameter Object = %@",

paramObject);

NSLog(@"Second Operation — Main Thread = %@",

[NSThread mainThread]);

NSLog(@"Second Operation — Current Thread = %@",

[NSThread currentThread]);

}

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

NSNumber *firstNumber = @111;

Поделиться:
Популярные книги

Камень

Минин Станислав
1. Камень
Фантастика:
боевая фантастика
6.80
рейтинг книги
Камень

Последний Паладин. Том 2

Саваровский Роман
2. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 2

Древний мир

Ермановская Анна Эдуардовна
Загадки истории
Научно-образовательная:
история
культурология
6.25
рейтинг книги
Древний мир

Я снова не бог. Книга XXXVIII

Дрейк Сириус
38. Дорогой барон!
Фантастика:
аниме
попаданцы
5.00
рейтинг книги
Я снова не бог. Книга XXXVIII

Академия

Щепетнов Евгений Владимирович
3. Петр Синельников
Фантастика:
фэнтези
6.20
рейтинг книги
Академия

Мир “Искателя” (сборник)

Брэдбери Рэй Дуглас
Журнал «Искатель»
Фантастика:
научная фантастика
7.00
рейтинг книги
Мир “Искателя” (сборник)

Приходит ночь

Грэм Хизер
Любовные романы:
остросюжетные любовные романы
8.60
рейтинг книги
Приходит ночь

Седина в бороду, Босс… вразнос!

Трофимова Любовь
Юмор:
юмористическая проза
5.00
рейтинг книги
Седина в бороду, Босс… вразнос!

Откройте Америку!

Яцкарь Григорий Семенович
Проза:
современная проза
роман
6.25
рейтинг книги
Откройте Америку!

Утопия

Чайлд Линкольн
151. Книга-загадка, книга-бестселлер
Детективы:
триллеры
8.00
рейтинг книги
Утопия

Страх

Рыбаков Анатолий Наумович
2. Дети Арбата
Проза:
историческая проза
9.49
рейтинг книги
Страх

Я до сих пор князь. Книга XXII

Дрейк Сириус
22. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор князь. Книга XXII

111 симфоний

Михеева Людмила Викентьевна
Справочная литература:
справочники
6.00
рейтинг книги
111 симфоний

Когда физики в цене

Радунская Ирина Львовна
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Когда физики в цене