在后台线程上计算iPhone上的字符串大小

时间:2010-03-22 03:01:05

标签: ios iphone cocoa nsstring uikit

我的应用程序中发生了一些有点大量的字符串大小计算(每个都需要接近500毫秒,当用户在我的应用程序中滚动到新的“页面”时会发生(如天气应用程序)。仅延迟每页发生一次,因为计算只需要运行一次(甚至可以缓存以用于具有相同数据的后续启动)。

无论如何,我仍然不想阻止这类工作的UI,因为我使用线程尖叫,但我知道UIKit并不打算从其他线程中使用。 (我知道NSString不是UIKit的一部分,但字符串大小调整方法是UIKitAdditions的一部分......)

那我该怎么做呢?什么是不阻止UI并安全地阻止UI的最佳方法?

3 个答案:

答案 0 :(得分:3)

我总是在背景线程上使用-sizeWithFont和朋友来计算单元格高度等。它运行得很好。但是,由于iOS 6.0,它会导致间歇crashes。希望这些将被修复,因为它是在后台计算UI布局的基本性能优化。

答案 1 :(得分:2)

我可能错了,但我相信禁止在其他线程中使用UIKit与GUI工作的一般方式(单线程)有关,通常只适用于GUI本身受影响的情况。

sizeWithFont:方法实际上并不影响GUI,所以我认为在另一个线程中调用它不会有问题。

也许一个对这种方法在幕后工作方式有更多经验的iPhone人可以证实我的想法或让我直截了当。

答案 2 :(得分:2)

考虑使用NSOperation / NSOperationQueue。 Cocoa是我的女朋友有一个tutorial,Apple有一个guide