IOS多執行緒程式設計NSThread的使用方法

2022-09-24 09:48:11 字數 3163 閱讀 2709

ios多執行緒程式設計nsthread的使用方法

nsthread是多執行緒的一種,有兩種方法建立子執行緒

(1)優點:nsthread 比gcd、nsoperation都輕量級

(2)缺點:需要自己管理執行緒的生命週期,執行緒同步。執行緒同步對資料的加鎖會有一定的系統開銷

第一種是隱藏建立,有以下幾種方式:

(1)多用於序列:- (id)performselector:(sel)aselector withobject:(id)object;

(2)後台執行,多用於並行:- (void)performselectorinbackground:(sel)aselector withobject:(nullable id)arg;

(3)延遲執行:- (void)performselector:(sel)aselector withobject:(nullable id)anargument afterdelay:(nstimeinterval)delay;

(4)回到主線程執行:- (void)performselectoronmainthread:(sel)aselector withobject:(nullable id)arg waituntildone:(bool)wait

注意:(1)通過方法" + (void)cancelpreviousperformrequestswithtarget:(id)atarget selector:(sel)aselector object:(nullable id)anargument; ",或"+ (void)cancelpreviousperformrequestswithtarget:(id)atarget"停止執行; 

示例://建立子執行緒-隱式方法

// 子執行緒-序列

[self performselector:@selector(showcount:) withobject:@(11)];

[self performselector:@selector(showcount:) withobject:@(12)];

[self performselector:@selector(showcount:) withobject:@(23)];

// 子執行緒-並行(後台) 

[self performselectorinbackground:@selector(showcount:) withobject:@(41)];

[self performselectorinbackground:@selector(showcount:) withobject:@(42)];

// 回到主線程

[self performselectoronmainthread:@selector(showcount:) withobject:@(51) waituntildone:yes];

// 子執行緒延遲執行

[self performselector:@selector(showcount:) withobject:@(61) afterdelay:5.0];

// 停止

[nsobject cancelpreviousperformrequestswithtarget:self];

第二種是顯示建立,方式如下:

- (instancetype)initwithtarget:(id)target selector:(sel)selector object:( id)argument;

注意: (1)通過方法" - (void)start; "開始執行;

(2)通過方法" - (void)cancel; "停止執行;  

示例://建立子執行緒-顯示方法

self.thread = [[nsthread alloc] initwithtarget:self selector:@selector(showcount:) object:@(61)];

self.thread.name = @"計數";

[self.thread start];

[self.thread cancel];

**示例

- (void)showcount:(nsnumber *)number

if (iscancelthread) } }

bool iscancelthread = no;

- (void)stopclick } }

- (void)downloadimage:(nsstring *)imageurl

else

// nsurl *url = [nsurl urlwithstring:imageurl];

// nsurlrequest *request = [nsurlrequest requestwithurl:url];

// nsurlsession *session = [nsurlsession sharedsession];

// nsurlsessiondatatask *datatask = [session datataskwithrequest:request completionhandler: ^(nsdata *data, nsurlresponse *response, nserror *error) ];

//

// // 使用resume方法啟動任務

// [datatask resume];

}- (void)updateimage:(uiimage *)image

nsstring *imageurl = @"";

// 隱藏建立

// [self performselectorinbackground:@selector(downloadimage:) withobject:imageurl];

[self performselectoronmainthread:@selector(downloadimage:) withobject:imageurl waituntildone:yes];

// 建立子執行緒-顯示方法

self.thread = [[nsthread alloc] initwithtarget:self selector:@selector(downloadimage:) object:imageurl];

self.thread.name = @"imagedownload";

[self.thread start];

本文標題: ios多執行緒程式設計nsthread的使用方法

本文位址:

iOS多執行緒程式設計入門

程序 執行緒 區 import inte ce viewcontroller uiviewcontroller end 複製 補充說明 補充一點 如果我們的程式中 出現了多個執行緒競爭同乙個資源的情況,這個時候 我們需要對這個資源進行同步保護 synchronized 讓執行緒處於乙個排隊狀態 當乙...

iOS多執行緒程式設計 執行緒同步總結

1 原子操作 osatomic系列函式 ios平台下的原子操作函式都以osatomic開頭,使用時需要包含標頭檔案。不同執行緒如果通過原子操作函式對同一變數進行操作,可以保證乙個執行緒的操作不會影響到其他執行緒內對此變數的操作,因為這些操作都是原子式的。因為原子操作只能對內建型別進行操作,所以原子操...

iOS多執行緒程式設計 執行緒同步總結

1 原子操作 osatomic系列函式 ios平台下的原子操作函式都以osatomic開頭,使用時需要包含標頭檔案。不同執行緒如果通過原子操作函式對同一變數進行操作,可以保證乙個執行緒的操作不會影響到其他執行緒內對此變數的操作,因為這些操作都是原子式的。因為原子操作只能對內建型別進行操作,所以原子操...