GCD dispatch_async и NSURLConnection - PullRequest
       23

GCD dispatch_async и NSURLConnection

5 голосов
/ 23 февраля 2012

Я хотел бы получить быстрый и простой способ получения данных с URL без необходимости связываться с delegates.

Что-то не так со следующим?

// Use gcd
dispatch_queue_t queue = dispatch_queue_create("com.dowork", 0);
dispatch_queue_t main = dispatch_get_main_queue();

//  do the long running work in bg async queue
// within that, call to update UI on main thread.
dispatch_async(queue, ^{ 

   // Do work in the background
    NSData *response = [NSURLConnection sendSynchronousRequest:serviceRequest returningResponse:&serviceResponse error:&serviceError];

   dispatch_async(main, ^{ 

       // Update UI
       self.data = response;
       [self.tableView reloadData];


   });//end
});//end

Я думал, что где-то давно читал, что использование синхронного метода NSURLConnection в фоновом потоке вызовет утечки памяти.Это правда?

Есть ли проблемы с кодами, которые там размещены?Есть ли проблемы с назначением данных для self.data в пределах блока?

1 Ответ

4 голосов
/ 23 февраля 2012

Если вы нацеливаетесь на ios5 и более поздние версии, есть NSURLConnection sendAsynchronousRequest: queue: завершениеHandler:

Чтобы ответить на ваш конкретный вопрос, мне кажется, что response может просочиться: я не знаюНе знаю, существует ли неявный пул авто-релизов в GCD-потоках.

Сделано небольшое исследование: у GCD-потоков есть свои пулы авто-релизов, но вы не знаете, когда они будут удалены.Вы, вероятно, хотите заключить в скобки первые два оператора с явным пулом автоматического выпуска.

См. Также Вам необходимо создать NSAutoreleasePool внутри блока в GCD?

...