我是新來的客觀C,來自.NET和Java背景。在後臺線程上創建視圖,在主線程中添加主視圖
所以我需要以異步方式創建一些UIWebViews中,我使用
dispatch_queue_t queue = dispatch_queue_create("myqueue", NULL);
dispatch_async(queue, ^{
// create UIwebview, other things too
[self.view addSubview:webView];
});
你owuld想象這是我自己的隊列這樣做會引發錯誤:
bool _WebTryThreadLock(bool), 0xa1b8d70: Tried to obtain the web lock from a thread other
than the main thread or the web thread. This may be a result of calling to UIKit from a
secondary thread. Crashing now...
所以,我該怎麼加主線程的子視圖?
要小心,即使initWithFrame不保證是線程安全的。請參閱http://stackoverflow.com/questions/11122957/is-it-ok-to-create-a-uiview-on-a-background-thread – stefreak 2015-02-12 17:53:33
也許我對'線程安全'的理解是錯誤的。但我認爲線程安全意味着可以同時從多個線程操縱一個對象。例如。你可以考慮一個線程安全的數組,它可以讓你從多個線程中添加對象。 然而,在這種情況下,我們沒有操縱或訪問來自多個線程視圖對象/同時隊列。我們在一個線程/隊列上創建它,然後將其交給另一個線程/隊列。 – Florian 2015-02-12 19:00:20
事實證明,我所鏈接的問題的答案是誤導 - 抱歉。蘋果表示:「唯一一次可能不是絕對必要的是創建視圖對象本身,因此它應該是安全的。 – stefreak 2015-02-12 20:41:12