執行緒簡介
為什麼要使用多執行緒
當使用者在執行某項操作,比如上傳圖片,主執行緒會執行這個動作,直到上傳結束後。主執行緒才會執行後面的操作,在這段時間內主執行緒處於忙碌狀態,不會對使用者的請求作出任何反應。這樣的話會給使用者一種很不好的體驗,此時多執行緒的作用就體現出來了。
單執行緒和多執行緒的區別
- 單執行緒程式:只有一個執行緒即主執行緒,程式碼順序執行,容易出現程式碼阻塞(頁面假死)。
- 多執行緒程式:有多個執行緒,執行緒之間獨立執行,能有效的避免程式碼阻塞,並提高程式的執行效能。
- 注意:iOS中關於UI的新增和重新整理必須在主執行緒中操作。
多執行緒中的一些基本知識
- 程式:一個正在執行的程式可以看做一個程式,程式擁有當前專案裡的所有資源。
- 執行緒:程式中獨立執行的程式碼段。
- 一個程式是由一個或多個執行緒組成。程式值負責資源的排程和分配,執行緒才是程式真正的執行單元,負責程式碼的執行。
- 執行緒分為主執行緒,和子執行緒,主執行緒的別名右叫做UI執行緒。
- 子執行緒在iOS5之前不具備重新整理UI的功能。重新整理UI不建議在子執行緒中(如果多個執行緒同時操作ui有可能會出現問題,導致程式的崩潰)
- 處理資料時,耗時的處理,在子執行緒中處理,重新整理UI時在主執行緒中。
- 多執行緒之間的併發執行其實不是真正意義上的併發執行,而是一中偽併發執行。
- 偽併發執行:CPU快速的在多個執行緒之間跳躍。
cocoa中與執行緒相關的類
- NSThread:代表執行的執行緒,可以使用該類的物件封裝執行緒操作。
- NSOperation:操作物件(Operation Object)的抽象基類,定義了任務的執行環境、狀態等基本屬性,繼承該類來執行具體的操作。
- NSInvocationOperation:NSOperation的子類,可以指定操作方法。
- NSOperationQueue:操作佇列(Operation queue)的管理者,配合NSOperation的子類物件和NSInvocationOperation物件使用,通過新增操作物件完成併發操作。
多執行緒管理
多執行緒管理也就是主執行緒和子執行緒之間的一個通訊:所謂的通訊就是從子執行緒回到主執行緒,從主執行緒進入子執行緒。