转自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!"];
- }
原文链接: https://www.cnblogs.com/-xiaole/p/3151040.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/93167
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!