1 輕量級執行緒 nsthread
#####什麼是nsthread?
基於執行緒使用 輕量級的多執行緒程式設計方法 乙個nsthread物件代表乙個執行緒 需要手動管理 執行緒的生命週期 處理執行緒同步
// 1 動態建立
nsthread *newthread = [nsthread alloc] initwithtarget:self selector:@slector(threadrun) object:nil];
複製**
// 2 靜態建立
[nsthread detachnewthreadselector:@selector(threadrun) totarget:self withobject:nil];
複製**
// 3 執行緒開啟
[newthread start];
複製**
// 4 執行緒暫停 會阻塞當前的執行緒
[nsthread sleepfortimeinterval:1.0];
[nsthread sleepuntildate:[nsdate datewithtimeintervalsincenow:1.0];
複製**
// 5 執行緒取消 不會停止執行緒 只做 狀態記錄
[newthread cancel];
複製**
// 6 執行緒停止 // 立即終止除了主線程並退出執行緒所有的執行緒並退出 需要在掌握所有執行緒狀態情況呼叫 否則記憶體問題
[nsthread exit];
複製**
// 7 獲取當前執行緒
[nsthread currentthread];
複製**
// 8 獲取主線程
[nsthread mainthread];
複製**
// 9 執行緒優先順序
[newthread setqualityofservice:nsqualityofserviceuserinteractive]
複製**
// nsqualityofserviceuserinteractive:最高優先順序,用於使用者互動事件
nsqualityofserviceuserinitiated:次高優先順序,用於使用者需要馬上執行的事件
nsqualityofservicedefault:預設優先順序,主線程和沒有設定優先順序的執行緒都預設為這個優先順序
nsqualityofserviceutility:普通優先順序,用於普通任務
nsqualityofservicebackground:最低優先順序,用於不重要的任務
執行緒間通訊
// 1 指定當前執行緒執行操作
[self performselector:@selector(threadrun)];
[self performselector:@selector(threadrun) withobject:nil];
[self performselector:@selector(threadrun) withobject:nil afterdelay:1];
複製**
// 2 (在其他執行緒中)指定主線程執行操作 // 更新ui在主線程執行
[self performselectoronmainthread:@selector(threadrun) withobject:nil waituntildone:yes];
複製**
// 3 (在主線程)指定其他執行緒執行操作
// 指定為某個執行緒
[self performselector:@selector(threadrun) onthread:newthread withobject:nil waituntildone:yes];
複製**
// 後台執行緒
[self performselectorinbackground:@selector(threadrun) withobject:nil];
複製**
執行緒同步
// 一段時間只可以某乙個執行緒訪問某個資源
// 執行緒加鎖 nslock @synchronized
處理例子
// 監聽執行緒退出的通知
[[nsnotificationcenter defaultcenter] addobserver:self selector:@selector(threadexitnotifation) name:nsthreadwillexitnotification object:nil
];self.tickedcount = 50;
// 建立執行緒
nsthread *window1 = [[nsthread alloc] initwithtarget:self selector:@selector(saleticket) object:nil];
window1.name = @"beijing";
[window1 start]; // 開始執行緒
nsthread *window2 = [[nsthread alloc] initwithtarget:self selector:@selector(saleticket) object:nil
];window2.name = @"guanzhou";
[window2 start];
// 執行緒執行完推出 持續使用 售票 加迴圈
- (void)saleticket
else }}
}複製**
// 執行緒持續執行和退出 // 使用runloop 一直執行
[[nsnotificationcenter defaultcenter] addobserver:self selector:@selector(threadexitnotifation) name:nsthreadwillexitnotification object:nil
];self.tickedcount = 50;
// 建立執行緒
nsthread *window1 = [[nsthread alloc] initwithtarget:self selector:@selector(thread1) object:nil];
[window1 start]; // 開始執行緒
nsthread *window2 = [[nsthread alloc] initwithtarget:self selector:@selector(thread2) object:nil];
[window2 start];
// 指派任務給執行緒 兩個執行緒執行相同任務
[self performselector:@selector(saleticket) onthread:window1 withobject:nil waituntildone:no];
[self performselector:@selector(saleticket) onthread:window2 withobject:nil waituntildone:no];
//- (void)thread1
//- (void)thread2
- (void)threadexitnotifation
else }}}
複製**
iOS多執行緒
iphone 中的執行緒應用並不是無節制的,官方給出的資料顯示iphone os下的主線程的堆疊大小是1m,第二個執行緒開始都是512kb。並且該值不能通過編譯器開關或執行緒api函式來更改。只有主線程有直接修改ui的能力。一 nsoperation和nsoperationqueue 1 乙個繼承自...
iOS多執行緒
iphone 中的執行緒應用並不是無節制的,官方給出的資料顯示iphone os下的主線程的堆疊大小是1m,第二個執行緒開始都是512kb。並且該值不能通過編譯器開關或執行緒api函式來更改。只有主線程有直接修改ui的能力。一 nsoperation和nsoperationqueue 1 乙個繼承自...
iOS多執行緒
iphone 中的執行緒應用並不是無節制的,官方給出的資料顯示iphone os下的主線程的堆疊大小是1m,第二個執行緒開始都是512kb。並且該值不能通過編譯器開關或執行緒api函式來更改。只有主線程有直接修改ui的能力。一 nsoperation和nsoperationqueue 1 乙個繼承自...