使用NSOperationQueue应用程序在后台线程和sizeWithFont中执行drawRect

时间:2013-02-19 22:19:25

标签: iphone ios objective-c ipad

我在后台线程上调用sizeWithFont,这个sizeWithFont位于drawRect上,它在后台线程上的NSOperationQueue上调用。我偶尔会在sizeWithFont上随机崩溃。我一直在谷歌搜索,似乎有人说这是苹果的问题。那么解决这个问题的更好方法是什么?

从文档中可以看出iOS 4中的以下内容:

  

在UIKit中绘制图形上下文现在是线程安全的。   具体来说:用于访问和操作图形的例程   上下文现在可以正确处理驻留在不同的上下文   线程。字符串和图像绘制现在是线程安全的。使用颜色和   现在可以安全地使用多个线程中的字体对象。

我有这样的事情:

 titleSize = [storyTitleString sizeWithFont:[UIFont fontWithName:kProximaNovaBold size:15] constrainedToSize:CGSizeMake(200, kCellMaximumTitleHeight) lineBreakMode:UILineBreakModeWordWrap];
在我的drawRect中

。您可以将storyTitleString替换为您想要的任何字符串。我还使用this库在后台线程中执行绘图。

1 个答案:

答案 0 :(得分:4)

UIKit不是线程安全的,所以你不能在后台线程上调用任何东西,它会导致间歇性的错误。您最好的选择是在主线程上开始操作之前从UIKit计算所需的一切,或者在运行期间切换到主线程,取决于您要完成的任务。