2013-06-04 157 views
2

UImage.AsPNG()線程安全嗎?當從Xamarin.iOS 6.3.5.43中使用UImage.AsPNG()從一個單獨的線程,我得到MonoTouch.UIKit.UIKitThreadAccessException。 從Apple文檔中,我看不到需要在主線程上執行此方法。 我沒有在6.2分支中得到這個警告。是UImage.AsPNG()線程安全嗎?

+0

UIKit中的任何內容都不是線程安全的。 – 2013-06-04 12:40:49

+0

@ H2CO3「在UIKit中繪製圖形上下文現在是線程安全的」:http://developer.apple.com/library/ios/releasenotes/General/WhatsNewIniOS/Articles/iPhoneOS4.html#//apple_ref/doc/ UID/TP40009559-SW29 – Krumelur

回答

3

是的,它是線程安全的,它已被固定在recently released Xamarin.iOS 6.2.7.

的問題是,我們必須與有關線程安全的API蘋果工程師的討論,我們犯了一個錯誤,當我們通過去他們給我們的信息。有關更多信息,請參閱bug report

1

從蘋果的文檔我看不到所需此方法可以在主線程

蘋果不指定每個方法的線程安全性UIKit上執行。 this disclaimer在主框架參考中給出:

注意:大多數情況下,UIKit類只能在應用程序的主線程中使用。對於從UIResponder派生的類或涉及以任何方式操作應用程序的用戶界面的類尤其如此。

回到原來的問題 - UIKitThreadAccessException由MonoTouch調試構建引發。它的目的是作爲一個檢查/調試工具,以確保你沒有在輔助線程上做UIKit的東西。

因爲從iOS 4開始,某些UIKit方法(主要是涉及繪製到圖形上下文的方法)變爲線程安全的,因此MonoTouch不會拋出此異常的方法白名單,這在MonoTouch文檔中可用。

我不能說UIImage.AsPNG()是否是線程安全的......我不認爲它是,但如果我錯了 - 或者你想冒險 - 你可以通過--disable-thread-check標誌來禁用MonoTouch的自動UIKit後臺線程檢查。 This blog post可能會有所幫助。