A UIViewController
需要大約半秒來載入其內容並出現在屏幕上。我怎樣才能讓它們全部在後臺加載,並在準備就緒時出現?如何在後臺線程中準備我的UI?
回答
Apple開發人員網站上有一個LazyTableImages示例。
它顯示瞭如何在後臺線程中執行繁重的工作並更新主線程上的UI。
PerformSelectorInBackground:withObject:
是一種可能的解決方案,但更現代的方法是使用異步塊。您可以在這些塊內的主線程上運行代碼以安全地更新UI。
The Concurrency Programming Guide是一個很好的地方找到更多的信息和這個例子。
最簡單的方法是使用NSObject的- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg
您只需將它傳遞給選擇器,它將在後臺開心,並且不會阻止您的用戶界面。但請注意,後臺線程有規則。
您不應該從後臺線程更新您的用戶界面。你需要確保你所調用的方法是線程安全的。
後臺線程不能更新UI,可以在後臺線程中執行所有的處理邏輯和調用用於UI更新主線程
實施例加載的tableView使用數據,使用背景線程來處理一切和加載數據,使用主線程中調用[tableView reloadData]
,看到大中央調度知道如何與IOS中的線程工作..
希望它有助於
創建一個GCD隊列來處理在後臺線程你的工作(閱讀文檔,因爲我的「創建」標籤和選項可能不是你想要的T)。
您可以異步地將它發送到隊列,這意味着對dispatch_async的調用將爲您提供的代碼塊在另一個線程中運行做出適當的安排,然後它會立即返回給您。
您給它的塊中的所有工作都將在單獨的線程上執行。請注意,最後,您會進行另一個電話,這次是使用衆所周知的主隊列。這會安排代碼在主線程中運行,這對於任何UI工作都是必需的。
此外,你真的應該閱讀有關GCD和特別是塊的文檔,因爲有內存和循環考慮。祝你好運。
dispatch_queue_t workQ = dispatch_queue_create("bgWorkQ", 0);
dispatch_async(workQ, ^{
// This code is now running in a background thread.
// Do all your loading here...
// When ready to touch the UI, you must do that in the main thread...
disptach_async(dispatch_get_main_queue(), ^{
// Now, this code is running in the main thread.
// Update your UI...
});
});
dispatch_release(workQ);
- 1. iOS:如何在主線程中更新UI的後臺線程?
- 2. 後臺線程vs UI線程
- 3. Qt:後臺線程刷新UI線程
- 4. 從後臺通知UI線程線程
- 5. 從後臺線程在UI線程中編程創建UI並將其複製到後臺線程?
- 6. 在後臺線程上準備視圖元素
- 7. 線程機制:在後臺準備和釋放緩存
- 8. 爲什麼我的後臺工作線程阻塞UI線程?
- 9. 在UI線程中引用後臺線程處理程序
- 10. 如何讓UI線程等待後臺線程完成?
- 11. 在後臺線程或UI線程中加載圖像?
- 12. 如何在後臺準備應用程序數據?
- 13. 如何從片段中的後臺線程更新UI
- 14. 更新片段後臺線程中的TextView(UI線程)
- 15. 如何將數據從後臺線程檢索到aysnctask中的UI線程?
- 16. 如何配置在UI線程和後臺線程之間共享的資源
- 17. 我如何在Titanium for Android設備中準備線條圖?
- 18. C#後臺線程在UI中導致滯後
- 19. 從後臺線程在UI線程上打開一個窗體
- 20. WPF:在UI線程和後臺線程之間傳遞對象
- 21. 在運行後臺UI中更新控件Winforms中的線程
- 22. 可以構建在後臺線程的形式,然後在UI線程顯示
- 23. 從後臺線程更新UI控件
- 24. 後臺線程似乎鎖定UI
- 25. 從後臺線程訪問UI對象
- 26. 從後臺更新UI線程
- 27. iOS,ARC:後臺線程凍結UI
- 28. 從多個後臺線程更新UI
- 29. wpf後臺線程更新UI控制
- 30. 從後臺線程更新UI
看到這個問題的答案:http://stackoverflow.com/questions/6087068/thread-safe-uikit-methods – 2012-05-23 12:00:09
不要做「UI的東西」在後臺線程。在初始化ViewController時做一些「UI stuff」,或者在ViewWillAppear中做。 – Martol1ni