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