Potrzebowałem szybkiego i łatwego sposobu na uzyskanie danych z URL
bez konieczności bałagania z delegates
.GCD dispatch_async i NSURLConnection
Czy coś jest nie tak z następującymi?
// 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
myślałem czytałem gdzieś dawno temu, że przy zastosowaniu metody synchronicznej NSURLConnection
w wątku tła spowoduje wycieki pamięci. Czy to prawda?
Czy są jakieś problemy z umieszczonymi tam kodami? Masz problemy z przypisaniem danych do self.data
w obrębie bloku?
Zdaję sobie sprawę, że i przetestowali niektórych implementacjach z nim. Ale nadal jest ograniczona do tego, co muszę zrobić. Metoda pokazana powyżej jest tak miła i łatwa do uzyskania 'NSData', wszystkie inne metody asynchroniczne wydają się być dwuetapowym procesem z delegatami. Tak więc wciąż zastanawiam się nad moim pierwotnym pytaniem. –
@Nic: zaktualizowałem moją odpowiedź – JeremyP
Dzięki, więc uważasz, że bezpiecznie jest to zrobić w ten sposób, o ile dodam własną pulę autorelease? –