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