gpt4 book ai didi

ios - 寻求有关 iOS 中线程性能影响的建议

转载 作者:行者123 更新时间:2023-11-29 13:30:51 24 4
gpt4 key购买 nike

我在 JSON 解析器上工作了一段时间 https://github.com/nathanday/ndjson它解析字节流而不是完整的文档,并直接转换为 CoreData 实体或自定义对象,而不是通常的属性列表对象。我接近 1.0 版,但我已经到了正确支持 NSURLConnection 连接并使解析压缩 JSON 字节流更容易的地步,我必须更改我的解析内部工作方式,以便可以重复调用它(使用 NSData NSURLConnectionDelegate didReceiveData: 方法的对象)。我有两个我能想到的选择,最简单的是使用线程等待下一个可用数据,或者我可以重写代码的解析部分,以便可以重复调用它,从哪里获取最后是通过为需要在调用之间维护的变量创建我自己的股份。使用线程是最简单的,因为它不需要非常少的重写,但由于这应该是一个通用的库,所以我担心在资源受限的设备(如 iPhone)上创建的线程比需要的多。当然,其他选项会使代码更加复杂,并且必须维护我自己的堆栈将不会占用资源。有没有人有任何好的建议或其他可能的选择。创建线程很昂贵。也许有人能想到一个创造性的方式使用 block ,或者是否可以调用 NSRunLoop 对象来执行下一个事件(NSURLConnectionDelegate 方法)。

最佳答案

在 iOS 和 OS X 下,Apple 提供了一种轻松处理线程的好方法:Grand Central Dispatch。线程并不昂贵,系统负责为您创建线程。

您可以使用串行队列来处理您的数据,然后使用 block 将其同步到主线程:

// create the queue that will process your data:
dispatch_queue_t dataProcessQueue = dispatch_queue_create("data process queue", NULL); // the name is there for debugging purposes
//dispatch to the newly created queue, and do not wait for it to complete
dispatch_async(dataProcessQueue, ^{
//your asynchronous job
dispatch_async(dispatch_get_main_queue(), ^{
// the work that has to be done on your main thread using data from above
});
});
// don't forget to release the queue
dispatch_release(dataProcessQueue);

如果你需要做并发工作,你应该使用并发队列。

Apple 的文档是 here

关于ios - 寻求有关 iOS 中线程性能影响的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11952277/

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