Objective c GCD调度\u异步和NSURLConnection

Objective c GCD调度\u异步和NSURLConnection,objective-c,ios,cocoa-touch,nsurlconnection,grand-central-dispatch,Objective C,Ios,Cocoa Touch,Nsurlconnection,Grand Central Dispatch,我想要一种从URL获取数据的快速简便方法,而不必与代理发生冲突 以下有什么问题吗 // 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

我想要一种从
URL
获取数据的快速简便方法,而不必与
代理发生冲突

以下有什么问题吗

// 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
有任何问题吗?

如果您的目标是ios5及更高版本,则存在NSURLConnection

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

现在已经做了一些研究:GCD线程有自己的自动释放池,但您不知道它们何时会被耗尽。您可能希望将前两条语句括在显式自动释放池中


另请参见

我意识到了这一点,并用它测试了一些实现。但是,我所需要做的仍然有限。我上面展示的方法非常好,很容易获得
NSData
,所有其他异步方法似乎都是一个包含委托的两步过程。所以,我还在想我原来的问题。谢谢,那么你认为这样做是安全的,只要我添加我自己的自动释放池?@Nic:即使没有你自己的自动释放池,也可能是安全的,但事情可能会比你想的更久。