我创建了一个用于运行深度计数器循环的测试应用程序。我分别使用 performSelectorInBackground 和 NSOperation 子类在后台线程中运行循环函数。
我还使用 performSelectorOnMainThread 在 backgroundthread 方法中通知主线程,并在 NSOperation 子类中使用 [NSNotificationCenter defaultCenter] postNotificationName 来通知主线程以更新 UI。
最初,两个实现都给了我相同的结果,我能够更新 UI 而没有任何问题。我发现的唯一区别是两个实现之间的线程数。
performSelectorInBackground 实现创建了一个线程,并在循环完成后终止,我的应用程序线程数再次变为 1。
NSOperation 子类实现创建了两个新线程并保持存在于应用程序中,并且在 main() 函数中循环完成后我可以看到 3 个线程。
所以,我的问题是为什么 NSOperation 创建了两个线程,为什么它没有像第一个后台线程实现一样被终止?
我有点困惑,无法决定哪种实现在性能和内存管理方面最好。