iPhone多線程編程初體驗(yàn)
找了很長時(shí)間IPhone下多線程的編程的內(nèi)容, 用到的類是UIKit的中NSThread.。
在google過程中,發(fā)現(xiàn)很多文都驚喜地標(biāo)題著類似< 多線程的OS4來了>, 這些想正向引導(dǎo)一下, 0S4的亮點(diǎn)在于多任務(wù),一個(gè)任務(wù)為一個(gè)進(jìn)程,也叫多進(jìn)程, 而多線程在早期的IPHONEOS上都是有的.
IPHONE OS中任務(wù)的概念是一個(gè)應(yīng)用, 在一個(gè)時(shí)間你只能做一件事情, 即不能同時(shí)玩游戲,同時(shí)上QQ. 而多任務(wù)的時(shí)候是可以這么做的.
流程大概如下:
1. 創(chuàng)建一個(gè)線程
- [NSThread detachNewThreadSelect:@selector(BeginThread)
- toTarget:selft
- withObject:nil];
2.線程里做兩件,一件是后臺處理耗時(shí)間的活(dosomethinglongtime),另一件是更新UI(UpdateUI)
- view plaincopy to clipboardprint?
- (void) BeginThread{
- [self performSelectorInBackgroud:@selector(dosomethinglongtime)
- withObject:nil];
- [self perfomSelectorOnMainThread:@selector(UpdateUI)
- withObject:nil
- watUntilDone:NO];
- }
3. 那UpdateUI的數(shù)據(jù)怎么來呢
- view plaincopy to clipboardprint?
- -(void)dosomethinglongtime{
- // 修改共享變量 varProgress, varText等等
- }
- {void)UpdateUI{
- // 獲得共享變量 varProgress, varText等等, 顯示在界面上
- }
這樣就完成了一個(gè)大概的流程,但是UpdateUI里不能用while(1),不然主線程會堵在UpdateUI的函數(shù)里,怎么辦呢? Google了一個(gè)方法, UpdateUI的方法做了一下修改
這樣的意思, 如果沒線程沒結(jié)束,過0.2秒再回到這個(gè)函數(shù)更新界面, 如此循環(huán), 直到結(jié)束.
- view plaincopy to clipboardprint?
- (void)UpdateUI{
- // 獲得共享變量 varProgress, varText等等, 顯示在界面上
- if(!finished)
- [NSTimer scheduledTimerWithTimeInterval:0.2 target:self
- selector:@selector(UpdateUI) userInfo:nil repeats:NO];
- }
以上IPhone多線程編程的一種方法, 當(dāng)然還有人提議用NSOperation和NSOperationQueue,但我試了一把,沒把效果試出來, 等有結(jié)果再回來更新. 嘿嘿.
【編輯推薦】