2013-02-19 36 views
2

我在后台线程上调用sizeWithFont,这个sizeWithFont位于drawRect上,后台线程在NSOperationQueue上调用该drawRect。我偶尔会在sizeWithFont上发生随机崩溃。我一直在google搜索,似乎有人说这是苹果的问题。那么解决这个问题的更好方法是什么?使用NSOperationQueue在后台线程和sizeWithFont中执行drawRect崩溃应用程序

它在文档中表示,以下为iOS 4的的:

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

我有这样的事情:

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

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

回答

4

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

+2

截至iOS 4 UIKit是thredsafe,可以在这里看到http://developer.apple.com/library/ios/#releasenotes/General/WhatsNewIniOS/Articles/iPhoneOS4.html – adit 2013-02-19 22:30:40

+1

正确但不是全部,基本上你可以在背景上绘制上下文,特别是绘制字符串,但正如你所看到的,并非所有的东西在苹果文档中都是100%真的:)你能发布更多的代码,以便我可以尝试测试和帮助吗? – 2013-02-19 23:01:53

+0

我在帖子 – adit 2013-02-19 23:16:37

相关问题