gpt4 book ai didi

iphone - 可以从其他后台线程启动后台线程吗? (NSObj)

转载 作者:行者123 更新时间:2023-12-03 16:53:05 25 4
gpt4 key购买 nike

这个问题是针对那些与我不同的人,真正了解 cocoa 应用程序中的多线程。简要介绍一下情况:

情况:
我的应用程序通过使用 NSObject 中提供的方法实现并发。请告诉我是否可以执行以下操作:

1) 我的主视图 Controller 在后台启动一些工作以释放 UI:

[self performSelectorInBackground:@selector(loadImages:) withObject:nil];

2) 后台工作将其任务划分为更多后台线程上的几个较小的任务,以便每个任务在完成时更新(而不是在所有任务完成时更新):

[self performSelectorInBackground:@selector(loadOneImage:) withObject:nil];

基本原理:
这是我发明的唯一方法,可以让一组任务(加载/绘制自定义 UIViews)在每个完成后在 UI 中更新。否则,只有当组中的最后一个任务完成时,所有任务才会更新...

最佳答案

是的,您可以使用 performSelectorInBackground:... 调用从辅助线程生成辅助线程。

如果您有很多线程要生成(以这种方式),请考虑使用 NSOperationQueue。否则,您可能会遇到大量后台线程。例如,100 个线程,每个线程在移动设备中加载一张图像,这并不是一种很好的资源利用方式,也不会产生响应。 NSOperationQueue 允许您限制线程/工作线程的最大数量,并重用工作线程。

注意:使用“100 个线程”是因为这个数字远远超出了硬件的逻辑范围(问题标记为 iPhone)。如果您的图像加载全部在内存中,则只需使用串行(一次 1 个工作程序)NSOperationQueue - NSOperations 可以指定优先级。如果正在下载图像,那么您可能需要坚持 4 个或更少。

OS X 上的情况有所不同,OS X 上有更多的内核和可用资源,因此这些数字会随着硬件平台的变化而变化。在 OS X 上,您可以在一个应用程序中成功使用 100 个线程,尽管大多数应用程序需要接近这么多线程的情况并不常见。

关于iphone - 可以从其他后台线程启动后台线程吗? (NSObj),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5001638/

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