2013-07-14 3 views
0

Мне нужно связаться с службами RESTful через HTTP и HTTPS. Я читаю несколько примеров о выполнении асинхронных запросов с помощью класса NSURLConnection, а некоторые из них используют метод sendAsynchronousRequest:queue:completionHandler:, а другие используют метод connectionWithRequest:delegate: и реализуют методы NSURLConnectionDelegate. Я не могу четко указать, какие последствия имеет каждый из этих подходов, если разница только в реализации, но производительность и результаты одинаковы или если один из подходов лучше или правилен, чем другой ...NSURLConnection и различные способы создания асинхронных запросов

Спасибо!

ответ

0

Существуют два отличия, которые обычно являются ключевыми.

  • Во-первых, возвращаемый тип обоих методов. [NSURLConnection sendAsynchronousRequest:queue:completionHandler:] имеет тип возврата из void, что означает, что вы не можете захватить NSURLConnection, например. в собственность, поэтому вы теряете совсем некоторый контроль над ней, т. е. вы не можете [NSURLConnection cancel] это. С другой стороны, [NSURLConnection connectionWithRequest: delegate:] возвращает вам обратно, поэтому вы сохраняете полный контроль.
  • Во-вторых, если вы загружаете большой файл, метод на основе блоков будет загружать данные в память и «доставлять» его, когда выполняется блок . Предполагая небольшой ответ RESTful, это может быть хорошо для вас. Однако, если вы загружаете большой файл, вы можете написать входящие данные непосредственно в дескриптор файла, чтобы уменьшить объем памяти . Для этого вам нужен метод делегата [NSURLConnectionDataDelegate connection:didReceiveData:]. К сожалению, документация NSURLConnectionDataDelegate не легко связана в текущей документации Apple. Если вы установите себя как делегат NSURLConnection, будут вызваны методы .

Надеюсь, это поможет.

Смежные вопросы