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

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

Жанры

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

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

Шрифт:

NSURLRequest *urlRequest = [NSURLRequest requestWithURL: url];

NSURLResponse *response = nil;

NSError *error = nil;

NSLog(@"Firing synchronous url connection…");

NSData *data = [NSURLConnection sendSynchronousRequest: urlRequest

returningResponse:&response

error:&error];

if ([data length] > 0 &&

error == nil){

NSLog(@"%lu bytes of data was returned.", (unsigned long)[data length]);

}

else if ([data length] == 0 &&

error == nil){

NSLog(@"No data was returned.");

}

else if (error!= nil){

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

}

NSLog(@"We are done.");

self.window = [[UIWindow alloc] initWithFrame:

[[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

Если запустить это приложение, а потом взглянуть в окно консоли, то там окажется выведен следующий результат:

We are here…

Firing synchronous url connection…

2 52117 bytes of data was returned.

We are done.

Итак, вполне очевидно, что актуальный поток написал на консоли строку We are here…, дождался окончания соединения (поскольку это синхронное соединение, блокирующее актуальный поток), а потом вывел в окне консоли текст We are done. Теперь проведем эксперимент. Поместим то же самое синхронное соединение в глобальной параллельной очереди в GCD, то есть гарантированно обеспечим параллелизм, и посмотрим, что произойдет:

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

NSLog(@"We are here…");

NSString *urlAsString = @"http://www.yahoo.com";

NSLog(@"Firing synchronous url connection…");

dispatch_queue_t dispatchQueue =

dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(dispatchQueue, ^(void) {

NSURL *url = [NSURL URLWithString: urlAsString];

NSURLRequest *urlRequest = [NSURLRequest requestWithURL: url];

NSURLResponse *response = nil;

NSError *error = nil;

NSData *data = [NSURLConnection sendSynchronousRequest: urlRequest

returningResponse:&response

error:&error];

if ([data length] > 0 &&

error == nil){

NSLog(@"%lu bytes of data was returned.", (unsigned long)[data length]);

}

else if ([data length] == 0 &&

error == nil){

NSLog(@"No data was returned.");

}

else if (error!= nil){

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

}

});

NSLog(@"We are done.");

self.window = [[UIWindow alloc] initWithFrame:

[[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

Вывод будет примерно таким:

We are here…

Firing synchronous url connection…

We are done.

2 52450 bytes of data was returned.

Итак, в данном примере текущий поток вывел текст We are done в окне консоли, не дожидаясь, пока синхронное соединение завершит считывание с заданного URL. Интересно, правда? Таким образом, этот пример доказывает, что при умелом обращении синхронное URL-соединение не обязательно блокирует главный поток. Тем не менее оно гарантированно блокирует текущий поток.

11.4. Изменение URL-запроса с применением NSMutableURLRequest

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

Требуется корректировать различные HTTP-заголовки и настройки URL-запроса перед передачей его URL-соединению.

Решение

Эта техника лежит в основе некоторых разделов, рассмотренных далее в этой главе. Пользуйтесь NSMutableURLRequest вместо NSURLRequest.

Обсуждение

URL-запрос может быть изменяемым или неизменяемым. URL-запросы, относящиеся к первой категории, поддаются изменениям после выделения и инициализации, а те, что относятся ко второй категории, — нет. Этот раздел посвящен изменяемым URL-запросам. Их можно создавать с помощью класса NSMutableURLRequest.

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

Геном хищника. Книга шестая

Гарцевич Евгений Александрович
6. Я - Легенда!
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Геном хищника. Книга шестая

Второй кощей

Билик Дмитрий Александрович
8. Бедовый
Фантастика:
юмористическое фэнтези
городское фэнтези
мистика
5.00
рейтинг книги
Второй кощей

Подросток

Достоевский Федор Михайлович
Проза:
русская классическая проза
9.09
рейтинг книги
Подросток

Кровь на клинке

Трофимов Ерофей
3. Шатун
Фантастика:
боевая фантастика
попаданцы
альтернативная история
6.40
рейтинг книги
Кровь на клинке

Родословная. Том 1

Ткачев Андрей Юрьевич
1. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Родословная. Том 1

Кодекс Императора VI

Сапфир Олег
6. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Императора VI

Второгодка. Книга 5. Презренный металл

Ромов Дмитрий
5. Второгодка
Фантастика:
городское фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Второгодка. Книга 5. Презренный металл

Наследник

Назимов Константин Геннадьевич
3. Травник
Фантастика:
фэнтези
6.80
рейтинг книги
Наследник

Забытые боги

Рокотов Алексей
4. Путь князя
Фантастика:
фэнтези
рпг
попаданцы
5.00
рейтинг книги
Забытые боги

Князь Мещерский

Дроздов Анатолий Федорович
3. Зауряд-врач
Фантастика:
альтернативная история
8.35
рейтинг книги
Князь Мещерский

Я уже царь. Книга XXIX

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

Телохранитель Генсека. Том 1

Алмазный Петр
1. Медведев
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Телохранитель Генсека. Том 1

На границе империй. Том 7. Часть 2

INDIGO
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
На границе империй. Том 7. Часть 2

Избрание сочинения в трех томах. Том второй

Кочетов Всеволод Анисимович
Проза:
советская классическая проза
5.00
рейтинг книги
Избрание сочинения в трех томах. Том второй