2

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

从 iOS 4 开始,以下文档中说:

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

我有这样的事情:

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

在我的drawRect中。你可以用你想要的任何字符串替换storyTitleString。而且我还使用这个库在后台线程中执行绘图。

4

1 回答 1

4

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

于 2013-02-19T22:22:31.327 回答