1

我知道對視圖的所有更改都應在主線程上,但是我應該考慮使用dispatch_async來開始考慮哪種級別的複雜性?何時應該與主線程異步執行任務?

如果它被用於: - 數字運算(如計算複雜的概率) - 保存到某種形式的持久性存儲 的 - 更新模型對象 - 初始化大型物品

我舒服直到涉及到線程。我總是做異步網絡請求,但除此之外,我只是嘗試在主線程上使用最少的資源,並且仍然會產生稍微滯後的應用程序。

我搜索了多個來源,所以如果有類似的問題,指出它,並原諒我的無知。

回答

3

大部分與UI無關但可能會對應用程序的響應性產生負面影響的事物都是將任務移動到後臺隊列的候選項。不要擔心不是舒適又不失,但一些資源可能幫助:

+0

感謝您的所有有用的鏈接。讓我只是提出這個問題,讓它從我的腦海中解脫出來 - 它會是什麼以外的麻木不仁的設計,使每個非UI任務異步? – user

+1

@user我不會傾向於使_every_非UI任務異步。我會提出一個更實用的方法,即將影響應用程序響應的任何事物視爲異步設計的候選人。正確的異步設計並不總是微不足道的(例如,需要同步從多個線程訪問的對象/變量),所以我建議你在需要時通過這種努力而不是原則性的。 – Rob

2

一個非常簡單的答案:設備應該是響應式的,即儘可能立即對用戶交互做出反應。因此,只要有可能,任何需要超過幾分之一秒的操作都應作爲單獨的線程執行。
當然,多線程可能會非常棘手,但如果線程分離得很好,那就很簡單。需要記住的最重要的事情是UIKit的大多數類以及像數組這樣的許多其他類不是線程安全的,並且必須同步從多個線程訪問它們。通過使用@synchronize塊。因此,請閱讀docs,例如在這裏,仔細。

1

簡介您的應用程序。說真的,沒有別的東西會告訴你你的應用程序到底在哪裏變得遲緩。我在我自己的代碼中看到了意想不到的瓶頸,如UILabel呈現和字符串處理。沒有儀器我永遠不會考慮優化它們。