NSThread
使用NSThead創建線程有很多方法:
- +detachNewThreadSelector:toTarget:withObject:類方法直接生成一個子線程
1
|
|
- 創建一個NSThread類實例,然後調用start方法。
1 2 |
|
- 調用NSObject的
+performSelectorInBackground:withObject:
方法生成子線程。
1
|
|
- 創建一個NSThread子類,然後調用子類實例的start方法,。
創建線程也是有開銷的,iOS下主要成本包括構造內核數據結構(大約1KB)、棧空間(子線程512KB、主線程1MB,不過可以使用方法-setStackSize:
自己設置,注意必須是4K的倍數,而且最小是16K),創建線程大約需要90毫秒的創建時間。
第二種和第四種方法創建的線程有個好處是擁有線程的對象,因此可以使用performSelector:onThread:withObject:waitUntilDone:
在該線程上執行方法,這是一種非常方便的線程間通訊的方法(相對於設置麻煩的NSPort用於通訊),所要執行的方法可以直接添加到目標線程的Runloop中執行。Apple建議使用這個接口運行的方法不要是耗時或者頻繁的操作,以免子線程的負載過重。
第三種方法其實與第一種方法是一樣的,都會直接生成一個子線程。
上面四種方法生成的子線程都是detached狀態,即主線程結束時這些線程都會被直接殺死;如果要生成joinable狀態的子線程,只能使用pthread接口啦。
如果需要,可以設置線程的優先級(-setThreadPriority:
);如果要在線程中保存一些狀態信息,還可以使用到-threadDictionary
得到一個NSMutableDictionary,以key-value的方式保存信息用於線程內讀寫。