這時候多執行緒就是很好的方法了,透過GCD所提供的函數來撰寫,GCD是一個低階的C函數,他將程式碼封裝到一個block區段,然後再將這個block區段,放到所指定的佇列中,接下來就稍微來做個紀錄吧.
1.佇列(Dispatch Queues) 分3類
1.1 Main佇列:每個應用程式只會有一個main佇列,也是個預設的佇列,程式碼只會在同一個執行緒裡按照FIFO依序執行,main佇列只能夠過dispatch_async()函數將block區段中的程式碼放置佇列中,其方法為dispatch_get_main_queue().
範例:
補充:
如果使用同步的dispatch_sync會發生什麼事情呢?
例:
像這情況會照程卡死,因為我們已經在主程式了,因此可以使用isMainThread來做判斷
1.2 Concurrent佇列:每個App都有4種優先順序的Concurrent佇列,使用dispatch_get_global_queue().
範例:
1.3 Serial佇列:又稱private,因為是我們自己建立的佇列,建立時給個為一個識別碼,使用dispatch_queue_create()建立serial佇列
範例:
PS:處理1及處理2會同時執行.
那麼回到一開始的問題,那要完成多執行緒要怎麼使用呢,只要我們結合Main及Concurrent就可以了,如範例所示:
2.NSOperation 分2類
NSOperation是一個抽象的類別,不能夠直接使用它,必須使用子類別才行
1.分別有以下2類 :
- NSBlockOperation 主要是用來將程式封裝成block區段
- NSInvocationOperation 主要用來執行指定某個函數
2.使用NSOperation的優點:
提供了任務的狀態:isExecuteing, isFinished, 可以很方便的取消一個NSOperation的執行
可以更容易的添加任務的依賴關係
- 提供了任務的狀態:isExecuteing, isFinished, 可以很方便的取消一個NSOperation的執行
- 可以更容易的添加任務的依賴關係
3.1 多執行緒處理
3.2 依賴
結論:其實2種設計方法都很好,主要可以多一些解決問題的辦法,我認為 Dispatch Queues 因好維護,因此比較多人使用.
終於打完...(攤...QQ
沒有留言:
張貼留言