GCD dispatch_async和NSURLConnection

Nic*_*ard 5 cocoa-touch objective-c nsurlconnection grand-central-dispatch ios

我想要一种快速简便的方法来获取数据,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
Run Code Online (Sandbox Code Playgroud)

我以为我很久以前在某处读过,NSURLConnection在后台线程中使用同步方法会导致内存泄漏.这是真的?

在那里发布的代码是否有任何问题?将数据分配到self.data块内的任何问题?

Jer*_*myP 4

如果您的目标是 ios5 及更高版本,则可以使用 NSURLConnection 的sendAsynchronousRequest:queue:completionHandler:

为了回答你的具体问题,在我看来response可能会泄漏:我不知道 GCD 线程上是否有隐式自动释放池。

现在做了一些研究:GCD线程有自己的自动释放池,但你不知道它们什么时候会被耗尽。您可能希望使用显式自动释放池将前两个语句括起来。

另请参阅是否需要在 GCD 的块内创建 NSAutoreleasePool?