gpt4 book ai didi

objective-c - performSelectorInBackground 和 NSOperation 子类的区别

转载 作者:太空狗 更新时间:2023-10-30 04:02:53 24 4
gpt4 key购买 nike

我已经创建了一个用于运行深度计数器循环的测试应用程序。我分别使用 performSelectorInBackground 和 NSOperation 子类在后台线程中运行循环函数。

我还在 backgroundthread 方法中使用 performSelectorOnMainThread 通知主线程,在 NSOperation 子类中使用 [NSNotificationCenter defaultCenter] postNotificationName 通知主线程更新 UI。

最初,这两个实现都给我相同的结果,而且我能够毫无问题地更新 UI。我发现的唯一区别是两个实现之间的线程数。

performSelectorInBackground 实现创建了一个线程并在循环结束后终止,我的应用程序线程数再次变为 1。

NSOperation 子类实现创建了两个新线程并保持存在于应用程序中,在 main() 函数中循环完成后我可以看到 3 个线程。

那么,我的问题是为什么 NSOperation 创建了两个线程,为什么它没有像第一个后台线程实现那样被终止?

我有点困惑,无法决定哪种实现在性能和内存管理方面最好。

最佳答案

很可能是操作队列让线程保持事件状态,等待新操作出现。

您必须记住,操作队列旨在高效地处理许多操作,因此为每个操作创建和销毁线程会损害性能。因此,您所看到的可能只是队列设计为通过保持线程池事件而工作的方式。

基本上,只要您根据文档正确使用操作队列,我就不会担心。

关于objective-c - performSelectorInBackground 和 NSOperation 子类的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2935007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com