多线程应用程序开发

转自http://blog.csdn.net/cockroach/article/details/9047413

IOS上的多线程应用程序开发需要使用到Block,Block就是类似于C++中的函数指针的概念。


Block的主要用途在于多线程操作的情况。正常情况下流程如下:

  1. 创建一个queue;dispatch_queue_create
  2. 添加block到queue;dispatch_async

 

我们的界面中有两个button,两个label,事件处理代码如下:

 

  1. - (IBAction)generateNumber:(id)sender {  
  2.     NSString *str = [[NSString alloc] initWithFormat:@"Generate Number is %d.", arc4random()];  
  3.     [randomNumber setText: str];  
  4.       
  5. }  
  6.   
  7. - (IBAction)sleep:(id)sender {  
  8.     [sleepText setText: @"Now I'm going to sleep."];  
  9.     [NSThread sleepForTimeInterval:5];  
  10.     [sleepText setText: @"Now I wake up!"];  
  11. }  


可以看到,在没有多线程处理的情况下,我们点击sleep按钮之后,在wake up之前是不能点击generate按钮的,所以需要多线程处理。代码修改为:

 

 

 

    1. - (IBAction)generateNumber:(id)sender {  
    2.     NSString *str = [[NSString alloc] initWithFormat:@"Generate Number is %d.", arc4random()];  
    3.     [randomNumber setText: str];  
    4.       
    5. }  
    6.   
    7. - (IBAction)sleep:(id)sender {  
    8.     queue = dispatch_queue_create("my working queue", NULL);  
    9.     // 工作线程在后台异步工作  
    10.     dispatch_async(queue, ^(void){  
    11.         [self workingBackground];  
    12.     });  
    13.       
    14.   
    15. }  
    16.   
    17. - (void)workingBackground  
    18. {  
    19.     // 模拟后台工作  
    20.     [NSThread sleepForTimeInterval:5];  
    21.     // 通知前台刷新  
    22.     dispatch_async(dispatch_get_main_queue(), ^(void){  
    23.         [self refreshForground];  
    24.     });  
    25. }  
    26.   
    27. - (void)refreshForground  
    28. {  
    29.     [sleepText setText:@"Now I wake up!"];  
    30. }  
    31.           
posted @ 2013-06-23 14:55  小乐"  阅读(345)  评论(0编辑  收藏  举报