iOS多執行緒

2021-06-06 08:08:00 字數 2588 閱讀 6769

iphone 中的執行緒應用並不是無節制的,官方給出的資料顯示iphone os下的主線程的堆疊大小是1m,第二個執行緒開始都是512kb。並且該值不能通過編譯器開關或執行緒api函式來更改。

只有主線程有直接修改ui的能力。

一、 nsoperation和nsoperationqueue

1、乙個繼承自  nsoperation的操作類,該類的實現中必須有 - (void)main方法的。

2、使用nsoperation的最簡單方法就是將其放入nsoperationqueue中。

一旦乙個操作被加入佇列,該佇列就會啟動並開始處理它(即呼叫該操作類的main方法)。一旦該操作完成佇列就會釋放它。

self

.queue

= [[nsoperationqueue

alloc

] init];

articleparseoperation*parser = [[articleparseoperation

alloc

] initwithdata

:filepath

delegate

:self];

[queue

addoperation:parser];

[parser release];

[queue

release];

3、可以給操作佇列設定最多同事執行的運算元: [queue setmaxconcurrentoperationcount:2];

二、nsthread《轉》

一、執行緒建立與啟動

執行緒建立主要有二種方式:

-

(id)init;

// designated initializer

-(id)initwithtarget:

(id)target selector:

(sel)selector object:

(id)argument;

當然,還有一種比較特殊,就是使用所謂的convenient method,這個方法可以直接生成乙個執行緒並啟動它,而且無需為執行緒的清理負責。這個方法的介面是:

+

(void

)detachnewthreadselector:

(sel)aselector totarget:

(id)atarget withobject:

(id)anargument

前兩種方法建立後,需要手機啟動,啟動的方法是:

-

(void

)start;

二、執行緒的同步與鎖

import >

@property (nonatomic, retain) iboutlet uiwindow *window;

@end  

@synthesize window;-(

void

tickets =

100;

count =0;

// 鎖物件

ticketcondition =

[[nscondition alloc] init]

; ticketsthreadone =

[[nsthread alloc] initwithtarget:self selector:@selector(run) object:nil]

;[ticketsthreadone setname:@"thread-1"];

[ticketsthreadone start]

;  

ticketsthreadtwo =

[[nsthread alloc] initwithtarget:self selector:@selector(run) object:nil]

;[ticketsthreadtwo setname:@"thread-2"];

[ticketsthreadtwo start]

;//[nsthread detachnewthreadselector:@selector(run) totarget:self withobject:nil];

[window makekeyandvisible];}

-(void

)run

else

[ticketscondition unlock];}

}-(void

)dealloc

@end

三、執行緒的互動

執行緒在執行過程中,可能需要與其它執行緒進行通訊,如在主線程中修改介面等等,可以使用如下介面:

-

(void

)performselectoronmainthread:

(sel)aselector withobject:

(id)arg waituntildone:

(bool)wait

由於在本過程中,可能需要釋放一些資源,則需要使用nsautoreleasepool來進行管理,如:

-

(void

)startthebackgroundjob

四、關於執行緒池,大家可以檢視nsoperation的相關資料。

原帖: 

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 乙個繼承自...