IOS Xib 简单多线程编程代码
来源:互联网 发布:one note for mac 编辑:程序博客网 时间:2024/05/17 03:47
1、新建一个Single View Application工程,起名“MutableThread”.
2、在ViewController.xib 中拖入一个UILable,UIButton,UIActivityIndicatorView,然后和ViewController这个类进行关联。
3、源代码如下说明问题。
ViewController.h文件
#import<UIKit/UIKit.h>
@interface ViewController :UIViewController
@property (weak,nonatomic)IBOutletUILabel *myLabel;
@property (weak,nonatomic)IBOutletUIButton *myBtn;
@property (weak,nonatomic)IBOutletUIActivityIndicatorView *myActIndicView;
- (IBAction)btnClicked:(id)sender;
@end
#import "ViewController.h"
@interface ViewController ()
- (void)firstWork;
- (void)secondWork;
- (void)thirdWork;
- (void)finallyWork;
@end
@implementation ViewController{
int x;
int a;
int b;
}
- (void)viewDidLoad
{
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_myActIndicView.hidesWhenStopped =YES;
}
- (void)didReceiveMemoryWarning
{
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)btnClicked:(id)sender {
//记录开始时间
NSDate * startTime = [NSDatedate];
[_myActIndicViewstartAnimating];
_myBtn.alpha =0.5;
_myBtn.enabled =false;
//开始多线程 DISPATCH_QUEUE_PRIORITY_DEFAULT默认的方法是由系统决定什么时候有空才执行线程,自己不用考虑死锁的问题,GCD(Great Center Dispatch,伟大的中央调度系统)已经解决了
//创建一个全局的多线程队列,把所有线程放到这个队列中,由系统去调度执行。在这个队列中,再取调度主线程。主线程要用 dispatch_get_main_queue()
//多线程的代码并不是在当前这个方法中执行的,他们是两个不同的方法。是先执行当前方法,然后再去执行多线程的方法。
dispatch_queue_t rootQueue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
//把有睡眠语句的方法放到队列里面执行,异步执行
dispatch_async(rootQueue, ^{
[self firstWork];
dispatch_group_t subGroup = dispatch_group_create();
//因为 secondWork thirdWork 这两个方法谁先执行,谁后执行对结果没有影响,为了提高运行效率,可以选择将这两个方法异步执行,这样的话,只需要5s,如果同步执行的话,需要7s。所以用两个dispatch_group_async,代表两个方法同时执行
dispatch_group_async(subGroup, rootQueue, ^{
[self secondWork];
});
dispatch_group_async(subGroup, rootQueue, ^{
[self thirdWork];
});
//其他线程执行完后,要去通知主线程更新UI界面
dispatch_group_notify(subGroup, rootQueue, ^{
[self finallyWork];
//更新主UI的方法,必须用主线程 dispatch_get_main_queue()才可以。千万不要写成rootQueue
dispatch_async(dispatch_get_main_queue(), ^{
[_myActIndicView stopAnimating];
_myBtn.alpha =1;
_myBtn.enabled =YES;
_myLabel.text = [NSStringstringWithFormat:@"the result is %d",b];
//记录结束时间
NSDate * endTime = [NSDatedate];
//既然如此,NSDate * startTime这是一个局部变量,出了当前 btnClicked这个方法后,局部变量应该就已经释放了,为什么在这句中还能用呢?原因是,dispatch方法强引用了startTime,startTime的retainCount + 1,指针指向了startTime这个局部变量的内存空间。dispatch方法和btnClicked方法是两个不同的指针指向startTime这个局部变量的内存空间
NSLog(@"use %f seconds",[endTimetimeIntervalSinceDate:startTime]);
});
});
});
}
- (void)firstWork
{
sleep(3);
x ++;
a = 5;
b = 0;
}
- (void)secondWork
{
sleep(5);
b = b +x;
}
- (void)thirdWork
{
sleep(2);
b = b +a;
}
- (void)finallyWork
{
NSLog(@"b is %d",b);
}
@end
- IOS Xib 简单多线程编程代码
- ios XIB 和代码区别。
- iOS 代码规范~加载xib
- iOS多线程编程及简单封装图片下载
- iOS 多线程编程<十五、RunLoop简单介绍>
- iOS UI篇 xib的简单使用
- iOS 简单基础知识点(2)-xib
- iOS XIB文件的简单创建使用
- iOS开发之XIB文件简单创建
- iOS UICollectionView 纯代码,无xib
- iOS 代码修改xib中的约束
- iOS纯代码开发和xib开发
- iOS 【UIKit-代码/xib 自定义控件】
- iOS xib和代码关联使用
- iOS开发UIKit框架-可视化编程-XIB
- iOS 开发可视化编程之Xib 简述
- iOS控制器管理,代码,xib,Storyboard,Segue - iOS
- iOS多线程--多线程简单概览
- 常用的加密方式
- linux C 中的volatile使用(经典)
- openstack笔记,更新中...
- htc mytouch 4G无法开机的解决办法
- 前置、核心
- IOS Xib 简单多线程编程代码
- 判断当前编译器是C++编译还是C编译
- 探讨多任务下喂狗的方式
- SVN版本库出现错误之后清除svn方法
- Objective-C 可变数组
- HDMI基础知识
- oracle 10g 更换主机名或者IP后引起EM (dbconsole) 启动失败的解决方法
- service使用以及startService,stopService,bindService,unbindService方法比较
- 【Google】25匹马的角逐