IOS开发之多线程初体验

来源:互联网 发布:yurisa的容貌知乎 编辑:程序博客网 时间:2024/05/12 01:39

流程大概如下:

1. 创建一个线程


  1. [NSThread detachNewThreadSelect:@selector(BeginThread)    
  2.   toTarget:selft    
  3.   withObject:nil];   


2.线程里做两件,一件是后台处理耗时间的活(dosomethinglongtime),另一件是更新UI(UpdateUI)

  1. -(void) BeginThread{    
  2. [self performSelectorInBackgroud:@selector(dosomethinglongtime)    
  3. withObject:nil];    
  4. [self perfomSelectorOnMainThread:@selector(UpdateUI)    
  5. withObject:nil    
  6. watUntilDone:NO];    
  7. }  


3. 那UpdateUI的数据怎么来呢?

  1. -(void)dosomethinglongtime{    
  2. // 修改共享变量 varProgress, varText等等    
  3. }    
  4.     
  5. -(void)UpdateUI{    
  6. // 获得共享变量 varProgress, varText等等, 显示在界面上    
  7. }   


4.这样就完成了一个大概的流程,但是UpdateUI里不能用while(1),不然主线程会堵在UpdateUI的函数里,怎么办呢? Google了一个方法, UpdateUI的方法做了一下修改

  1. -(void)UpdateUI{    
  2. // 获得共享变量 varProgress, varText等等, 显示在界面上    
  3. if(!finished)    
  4.      [NSTimer scheduledTimerWithTimeInterval:0.2    
  5. target:self    
  6. selector:@selector(UpdateUI)    
  7. userInfo:nil repeats:NO];    
  8. }   

这样的意思, 如果没线程没结束,过0.2秒再回到这个函数更新界面, 如此循环, 直到结束.

原创粉丝点击