多线程应用程序开发
转自http://blog.csdn.net/cockroach/article/details/9047413
IOS上的多线程应用程序开发需要使用到Block,Block就是类似于C++中的函数指针的概念。
Block的主要用途在于多线程操作的情况。正常情况下流程如下:
- 创建一个queue;dispatch_queue_create
- 添加block到queue;dispatch_async
我们的界面中有两个button,两个label,事件处理代码如下:
- - (IBAction)generateNumber:(id)sender {
- NSString *str = [[NSString alloc] initWithFormat:@"Generate Number is %d.", arc4random()];
- [randomNumber setText: str];
- }
- - (IBAction)sleep:(id)sender {
- [sleepText setText: @"Now I'm going to sleep."];
- [NSThread sleepForTimeInterval:5];
- [sleepText setText: @"Now I wake up!"];
- }
可以看到,在没有多线程处理的情况下,我们点击sleep按钮之后,在wake up之前是不能点击generate按钮的,所以需要多线程处理。代码修改为:
- - (IBAction)generateNumber:(id)sender {
- NSString *str = [[NSString alloc] initWithFormat:@"Generate Number is %d.", arc4random()];
- [randomNumber setText: str];
- }
- - (IBAction)sleep:(id)sender {
- queue = dispatch_queue_create("my working queue", NULL);
- // 工作线程在后台异步工作
- dispatch_async(queue, ^(void){
- [self workingBackground];
- });
- }
- - (void)workingBackground
- {
- // 模拟后台工作
- [NSThread sleepForTimeInterval:5];
- // 通知前台刷新
- dispatch_async(dispatch_get_main_queue(), ^(void){
- [self refreshForground];
- });
- }
- - (void)refreshForground
- {
- [sleepText setText:@"Now I wake up!"];
- }