多线程应用程序开发

转自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.           

原文链接: https://www.cnblogs.com/-xiaole/p/3151040.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    多线程应用程序开发

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/93167

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月10日 上午2:01
下一篇 2023年2月10日 上午2:02

相关推荐