I am new in ios development. I have following questions:
What's the differences between those two.
I know when we use performSelectorInBackground, we create a new NSThread. But isn't the same when we use dispatch_group_async? Because if we create more than one dispatch_group_async, it means we need to submit more than one blocks in queue. And those blocks might run on different queues. Therefore, when we create more than one dispatch_group_async, does it means we create a new thread? (because blocks may run on different queues) (I kind of confused about NSThread and block queue.....)
Thanks!!
performSelectorInBackground:
Never. Do not use this method. It spawns an unbounded number of threads. Even before GCD was available, this was a horrible method.
performSelectorOnMainThread:
Meh… Never, but just because it's inconvenient. There's nothing deeply wrong with this method. It's just not as useful as dispatch_async()
.
The difference between GCD and the old performSelector…
methods (and NSThread
in general) is that GCD manages a thread pool for you. In general, you should avoid manual threading in Cocoa. Instead, use NSOperationQueue
or GCD (dispatch
methods). They provide a more useful queue abstraction rather than forcing you to manually manage threads.
Be sure to read over Apple's Migrating Away from Threads for more info.