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

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

Жанры

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

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

Шрифт:

поэтому составить сигнатуру метода совсем не сложно. */

NSMethodSignature *methodSignature =

[[self class] instanceMethodSignatureForSelector: selectorToCall];

/* Теперь основываем активизацию на сигнатуре метода. Данная активизация

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

NSInvocation *invocation =

[NSInvocation invocationWithMethodSignature: methodSignature];

[invocation setTarget: self];

[invocation setSelector: selectorToCall];

self.paintingTimer = [NSTimer timerWithTimeInterval:1.0

invocation: invocation

repeats: YES];;

/* Здесь
выполняется обработка, и когда наступает нужный момент,

задействуется метод экземпляра addTimer: forMode, относящийся к классу

NSRunLoop, чтобы запланировать данный таймер в данном рабочем цикле. */

[[NSRunLoop currentRunLoop] addTimer: self.paintingTimer

forMode: NSDefaultRunLoopMode];

}

— (void) stopPainting{

if (self.paintingTimer!= nil){

[self.paintingTimer invalidate];

}

}

— (void)applicationWillResignActive:(UIApplication *)application{

[self stopPainting];

}

— (void)applicationDidBecomeActive:(UIApplication *)application{

[self startPainting];

}

Целевой метод таймера получает экземпляр таймера, вызывающий его в качестве параметра. Например, метод paint:, показанный в начале данного раздела, демонстрирует, как таймер передается своему целевому методу — по умолчанию он (таймер) выступает в качестве единственного параметра целевого метода:

— (void) paint:(NSTimer *)paramTimer{

/* Что-то здесь делаем. */

NSLog(@"Painting");

}

Данный параметр дает нам ссылку на таймер, запускающий этот метод. Вы можете, например, при необходимости не допустить повторного запуска таймера — для этого используется метод invalidate. Кроме того, можно активизировать метод userInfo экземпляра класса NSTimer, чтобы получить объект, удерживаемый таймером (если такой объект имеется). Здесь мы имеем дело с обычным объектом, передаваемым методам инициализации NSTimer, затем этот объект передается непосредственно таймеру для дальнейшего пользования.

7.15.

Параллельное программирование с использованием потоков

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

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

Решение

В приложении воспользуйтесь потоками. Это делается примерно так:

— (void) downloadNewFile:(id)paramObject{

@autoreleasepool {

NSString *fileURL = (NSString *)paramObject;

NSURL *url = [NSURL URLWithString: fileURL];

NSURLRequest *request = [NSURLRequest requestWithURL: url];

NSURLResponse *response = nil;

NSError *error = nil;

NSData *downloadedData =

[NSURLConnection sendSynchronousRequest: request

returningResponse:&response

error:&error];

if ([downloadedData length] > 0){

/* Загрузка завершена. */

} else {

/* Ничего загружено не было. Проверьте значение Error. */

}

}

}

— (void)viewDidLoad {

[super viewDidLoad];

NSString *fileToDownload = @"http://www.OReilly.com";

[NSThread detachNewThreadSelector:@selector(downloadNewFile:)

toTarget: self

withObject: fileToDownload];

}

Обсуждение

Любое приложение iOS состоит из одного или нескольких потоков. В операционной системе iOS 5 у обычного приложения с одним контроллером вида изначально может быть от одного до пяти потоков, создаваемых системными библиотеками, с которыми связано приложение. Для вашего приложения будет создаваться как минимум один поток независимо от того, собираетесь вы пользоваться несколькими потоками или нет. Этот поток называется основным потоком пользовательского интерфейса и прикрепляется к главному рабочему циклу.

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

Тайны ушедшего века. Власть. Распри. Подоплека

Зенькович Николай Александрович
Научно-образовательная:
история
политика
5.00
рейтинг книги
Тайны ушедшего века. Власть. Распри. Подоплека

Тот, кто знает. Книга вторая. Перекресток

Маринина Александра
5.00
рейтинг книги
Тот, кто знает. Книга вторая. Перекресток

Мой идеальный смерч

Джейн Анна
1. Мой идеальный смерч
Юмор:
юмористическая проза
9.18
рейтинг книги
Мой идеальный смерч

Поезд смерти (Сборник)

Бирн Роберт
Мастера остросюжетного романа
Детективы:
техно триллер
6.25
рейтинг книги
Поезд смерти (Сборник)

Рабы Парижа

Габорио Эмиль
Детективы:
прочие детективы
5.00
рейтинг книги
Рабы Парижа

Барон меняет правила

Ренгач Евгений
2. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон меняет правила

Винодел

Джекобсон Алан
2. Карен Вейл
Детективы:
триллеры
маньяки
7.50
рейтинг книги
Винодел

Камень. Книга восьмая

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

"Охотник". Компиляция. Книги 1-12

Усманов Хайдарали
Собрание сочинений
Фантастика:
боевая фантастика
5.00
рейтинг книги
Охотник. Компиляция. Книги 1-12

Розы от киллера

Браун Сандра
Любовные романы:
остросюжетные любовные романы
8.67
рейтинг книги
Розы от киллера

Солнце цвета стали

Казаков Дмитрий Львович
2. Солнце севера
Фантастика:
фэнтези
6.88
рейтинг книги
Солнце цвета стали

Русские инородные сказки - 6

Фрай Макс
6. Русские инородные сказки
Фантастика:
фэнтези
6.25
рейтинг книги
Русские инородные сказки - 6

Арестант

Константинов Андрей Дмитриевич
7. Бандитский Петербург
Детективы:
боевики
8.29
рейтинг книги
Арестант

О любви

Жуховицкий Леонид Аронович
Проза:
рассказ
5.00
рейтинг книги
О любви