1. 程式人生 > >多執行緒程式設計指南之執行緒管理(iOS,Mac os )

多執行緒程式設計指南之執行緒管理(iOS,Mac os )

1.執行緒成本
多執行緒會佔用記憶體和效能資源。
多執行緒另外一個需要考慮的成本是成產成本。設計一個執行緒應用有時候會需要根本性的改變你應用的資料結構的組織方式。要做這些改變可能需要避免使用同步,因為本身設計不好的應用可能會造成巨大的效能損失,增加開發一個執行緒應用所需的時間。然而避免這些消耗的話,可能再執行的時候帶來更大的問題。
2.建立一個執行緒
建立低級別的執行緒相對簡單。在所有情況下,你必須有一個函式或是方法作為執行緒的主入口點,你必須使用一個可用的執行緒歷程啟動你的執行緒。下面介紹比較常用的建立基本執行緒技術
2.1使用NSThread
使用NSThread來建立執行緒有兩個方法
*使用detachNewThreadSelector:toTarget:withObject:類方法來生成一個新的執行緒

[NSThread detachNewThreadSelector:@selector(myMethod:)toTarget:self withObject:nil];

*建立一個新的NSThread物件,並呼叫它的start方法

NSThread*myThread=[[NSThread alloc] initWithTarget:self select:@select(myMethod:) object:nil];
[myThread start];

如果你擁有一個NSThread,它的執行緒當前真正執行,你可以給改該執行緒傳送訊息的唯一方法是在你的應用程式裡面的任何物件使用performSelector:onThread:withObject:waitUntilDone:方法

2.2 使用POSIX的多執行緒
基於c語言支援的使用POSIX執行緒API來建立執行緒的方法。
2.3 使用NSObject來生成一個執行緒
所有物件都可能生成一個新的執行緒,並用它來執行任意方法。方法performSelectInBackground:withObject:新生成一個脫離的執行緒,使用指定的方法作為新執行緒的主體入口點。
[myObj performSelectorInBackground:@select(doSomething) withObject:nil];
呼叫該方法的效果和你在當前物件裡面使用 NSThread 的 detachNewThreadSelector:toTarget:withObject:傳遞 selectore,object 作為引數 的方法一樣。新的執行緒將會被立即生成並執行,它使用預設的設定。在 selectore 內部,你必須配置執行緒就像你在任何執行緒裡面一樣。比如,你可能需要設定一個自動 釋放池(如果你沒有使用垃圾回收機制),在你要使用它的時候配置執行緒的 run loop。 關於更是介紹如果配置執行緒的資訊
2.4使用其他執行緒技術
儘管 POSIX 例程和 NSThread 類被推薦使用來建立低階執行緒,但是其他基於 C 語 言的技術在 Mac OS X 上面同樣可用。