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

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

Жанры

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

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

Шрифт:

});

}

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

Скачаем изображение и отобразим его для пользователя. Это

мы сделаем в методе экземпляра viewDidAppear:, относящемся к контроллеру вида, который в данный момент отображается в приложении для iPhone:

— (void) viewDidAppear:(BOOL)paramAnimated{

[super viewDidAppear: paramAnimated];

dispatch_queue_t concurrentQueue =

dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(concurrentQueue, ^{

__block UIImage *image = nil;

dispatch_sync(concurrentQueue, ^{

/* Здесь скачивается изображение. */

/* Изображение iPad с сайта Apple. Гиперссылка слишком длинная,

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

NSString *urlAsString = @"http://images.apple.com/mobileme/features"\

«/images/ipad_findyouripad_201 00518.jpg»;

NSURL *url = [NSURL URLWithString: urlAsString];

NSURLRequest *urlRequest = [NSURLRequest requestWithURL: url];

NSError *downloadError = nil;

NSData *imageData = [NSURLConnection

sendSynchronousRequest: urlRequest

returningResponse: nil

error:&downloadError];

if (downloadError == nil &&

imageData!= nil){

image = [UIImage imageWithData: imageData];

/* Изображение у нас есть. Теперь можно его использовать. */

}

else if (downloadError!= nil){

NSLog(@"Error happened = %@", downloadError);

} else {

NSLog(@"No data could get downloaded from the URL.");

}

});

dispatch_sync(dispatch_get_main_queue, ^{

/* Здесь картинка отображается, и это происходит в главной очереди. */

if (image!= nil){

/* Здесь создается вид с изображением. */

UIImageView *imageView = [[UIImageView alloc]

initWithFrame: self.view.bounds];

/* Задаем
характеристики изображения. */

[imageView setImage: image];

/* Убеждаемся, что изображение масштабировано правильно. */

[imageView setContentMode: UIViewContentModeScaleAspectFit];

/* Добавляем изображение к виду данного контроллера вида. */

[self.view addSubview: imageView];

} else {

NSLog(@"Image isn't downloaded. Nothing to display.");

}

});

});

}

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

Рис. 7.2. Загрузка изображения и демонстрация его пользователю, применяется GCD

Приведем другой пример. Допустим, у нас есть массив из 10 000 случайных чисел, которые сохранены в файле на диске. Мы хотим загрузить этот файл в память и отсортировать числа в порядке возрастания (то есть сделать так, чтобы список начинался с наименьшего числа). Потом мы хотим отобразить полученный список для пользователя. Инструмент управления, который будет применяться при этой операции, определяется тем, для какой системы вы пишете программу. В случае с iOS идеальным выходом было бы использовать экземпляр UITableView, а при работе с Mac OS X — экземпляр NSTableView. Поскольку массива у нас еще нет, начнем с его создания, потом загрузим этот массив, а потом отобразим.

Вот два метода, которые помогут нам найти место на диске устройства, где мы собираемся сохранить массив из 10 000 случайных чисел:

— (NSString *) fileLocation{

/* Получаем каталог (-и) документа. */

NSArray *folders =

NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,

NSUserDomainMask,

YES);

/* Мы что-нибудь нашли? */

if ([folders count] == 0){

return nil;

}

/* Получаем первый каталог. */

NSString *documentsFolder = [folders objectAtIndex:0];

/* Прикрепляем имя файла к концу пути документа. */

return [documentsFolder

stringByAppendingPathComponent:@"list.txt"];

}

— (BOOL) hasFileAlreadyBeenCreated{

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

Испекли мы каравай (сборник)

Нестерова Наталья Владимировна
Любовные романы:
современные любовные романы
8.69
рейтинг книги
Испекли мы каравай (сборник)

Тайна замка Вержи

Михалкова Елена Ивановна
Детективы:
исторические детективы
9.15
рейтинг книги
Тайна замка Вержи

А может, в этот раз?

Бреттон Барбара
Любовные романы:
современные любовные романы
6.50
рейтинг книги
А может, в этот раз?

Любовь как закладная жизни

Горовая Ольга Вадимовна
2. Любовь в формате рыночных отношений
Любовные романы:
современные любовные романы
9.50
рейтинг книги
Любовь как закладная жизни

Правила мозга. Что стоит знать о мозге вам и вашим детям

Медина Джон
Научно-образовательная:
психология
4.62
рейтинг книги
Правила мозга. Что стоит знать о мозге вам и вашим детям

Ангел Спартака

Валентинов Андрей
2. Спартак
Фантастика:
альтернативная история
6.50
рейтинг книги
Ангел Спартака

Гуманистический психоанализ

Фромм Эрих Зелигманн
Научно-образовательная:
психология
философия
7.71
рейтинг книги
Гуманистический психоанализ

Чужак

Вилар Симона
Любовные романы:
исторические любовные романы
8.93
рейтинг книги
Чужак

Последний реанорец. Том I и Том II

Павлов Вел
1. Высшая Речь
Фантастика:
фэнтези
7.80
рейтинг книги
Последний реанорец. Том I и Том II

Мои друзья

Рябинин Борис Степанович
Дом и Семья:
домашние животные
6.60
рейтинг книги
Мои друзья

Сказки. Истории

Андерсен Ганс Христиан
66. Библиотека всемирной литературы
Проза:
классическая проза
7.38
рейтинг книги
Сказки. Истории

Кукушка

Скирюк Дмитрий Игоревич
4. Жуга
Фантастика:
фэнтези
8.40
рейтинг книги
Кукушка

Юдаизм. Сахарна

Розанов Василий Васильевич
Документальная литература:
публицистика
5.00
рейтинг книги
Юдаизм. Сахарна

Т. 13 Число зверя

Хайнлайн Роберт Энсон
13. Отцы-основатели. Весь Хайнлайн
Фантастика:
научная фантастика
7.00
рейтинг книги
Т. 13 Число зверя