Вход/Регистрация
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. */

}

  • Читать дальше
  • 1
  • ...
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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