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

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

Жанры

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{

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

Убивать чтобы жить 6

Бор Жорж
6. УЧЖ
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 6

Император Пограничья 10

Астахов Евгений Евгеньевич
10. Император Пограничья
Фантастика:
городское фэнтези
аниме
фантастика: прочее
попаданцы
5.00
рейтинг книги
Император Пограничья 10

Надуй щеки! Том 6

Вишневский Сергей Викторович
6. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки! Том 6

Петля, Кадетский Корпус. Книга четвертая

Алексеев Евгений Артемович
4. Петля
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Петля, Кадетский Корпус. Книга четвертая

Офицер

Земляной Андрей Борисович
1. Офицер
Фантастика:
боевая фантастика
7.21
рейтинг книги
Офицер

#НенавистьЛюбовь

Джейн Анна
Любовные романы:
современные любовные романы
6.33
рейтинг книги
#НенавистьЛюбовь

Антимаг его величества

Петров Максим Николаевич
1. Модификант
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Антимаг его величества

Я все еще не князь. Книга XV

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

Наследие Маозари 9

Панежин Евгений
9. Наследие Маозари
Фантастика:
попаданцы
постапокалипсис
рпг
сказочная фантастика
6.25
рейтинг книги
Наследие Маозари 9

Мастер 11

Чащин Валерий
11. Мастер
Фантастика:
боевая фантастика
попаданцы
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Мастер 11

Чертова дюжина

Юллем Евгений
2. Псевдоним "Испанец" - 2
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Чертова дюжина

Мы – Гордые часть 8

Машуков Тимур
8. Стальные яйца
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Мы – Гордые часть 8

Жена неверного маршала, или Пиццерия попаданки

Удалова Юлия
Любовные романы:
любовно-фантастические романы
4.25
рейтинг книги
Жена неверного маршала, или Пиццерия попаданки

Неучтенный элемент. Том 1

NikL
1. Антимаг. Вне системы
Фантастика:
городское фэнтези
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 1