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

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

Жанры

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.

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

Полное собрание стихотворений

Сологуб Федор Кузьмич
Поэзия:
поэзия
7.00
рейтинг книги
Полное собрание стихотворений

Ваш скандальный нрав

Чейз Лоретта
Любовные романы:
исторические любовные романы
7.38
рейтинг книги
Ваш скандальный нрав

Выбор завоевателя

Зан Тимоти
3. Завоеватели
Фантастика:
боевая фантастика
6.25
рейтинг книги
Выбор завоевателя

Прагматик

Володин Григорий Григорьевич
1. Император-Паук
Фантастика:
боевая фантастика
5.00
рейтинг книги
Прагматик

Вечный. Книга I

Рокотов Алексей
1. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.60
рейтинг книги
Вечный. Книга I

Загадка Катилины

Сейлор Стивен
3. Roma sub Rosa
Проза:
историческая проза
5.00
рейтинг книги
Загадка Катилины

Любовь больше, чем правда

Ермак Александр Николаевич
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Любовь больше, чем правда

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

INDIGO
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 4

Шпионы XX века

Найтли Филлип
Научно-образовательная:
история
политика
5.00
рейтинг книги
Шпионы XX века

Триптих. Одиночество в Сети

Вишневский Януш Леон
Проза:
современная проза
8.46
рейтинг книги
Триптих. Одиночество в Сети

Период распада

Афанасьев Александр
Фантастика:
боевая фантастика
5.00
рейтинг книги
Период распада

Игры патриотов

Клэнси Том
1. Джек Райан
Детективы:
триллеры
6.86
рейтинг книги
Игры патриотов

Ермолов

Гордин Яков Аркадьевич
1373. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Ермолов

Мои друзья

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