21

我是ios开发新手。我有以下问题:

  1. 当我们使用 GCD(dispatch_group_async, dispatch_async(dispatch_get_main_queue()...) 以及当我们使用 performSelectorInBackground/performSelectorOnMainThread?
  2. 这两者有什么区别。

    我知道当我们使用 performSelectorInBackground 时,我们会创建一个新的 NSThread。但是当我们使用dispatch_group_async时不一样吗?因为如果我们创建了多个dispatch_group_async,这意味着我们需要在队列中提交多个blocks。这些块可能在不同的队列上运行。所以,当我们创建多个dispatch_group_async的时候,是不是就意味着我们创建了一个新线程呢?(因为块可能在不同的队列上运行)(我对 NSThread 和块队列有点困惑.....)

谢谢!!

4

2 回答 2

34
于 2013-10-21T18:02:29.697 回答
2

实际上,在 iOS 4.0 之后,我找不到任何使用 performSelectorInBackground/onMainThread 的单一理由。如果您需要在后台执行某些操作,请使用 GCD(或者,更好NSOperationQueue的是,它自 4.0 以来构建在 GCD 之上,并提供更大的灵活性且开销很小),但请确保在使用块时不要创建保留循环。

于 2013-10-21T18:33:39.953 回答