2013-02-19 33 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

相關問題