我在后台线程上调用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库在后台线程中执行绘图。
答案 0 :(得分:4)
UIKit不是线程安全的,所以你不能在后台线程上调用任何东西,它会导致间歇性的错误。您最好的选择是在主线程上开始操作之前从UIKit计算所需的一切,或者在运行期间切换到主线程,取决于您要完成的任务。