GCD dispatch_async和NSURLConnection

时间:2012-02-23 09:45:57

标签: objective-c ios cocoa-touch nsurlconnection grand-central-dispatch

我想要一种快速简便的方法从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 个答案:

答案 0 :(得分:4)

如果你的目标是ios5及更高版本,那就是NSURLConnection的sendAsynchronousRequest:queue:completionHandler:

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

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

另见Do you need to create an NSAutoreleasePool within a block in GCD?