ios线程
来源:互联网 发布:服装3d软件 编辑:程序博客网 时间:2024/05/21 08:58
@synchronized(self) {
//code……只能被一个线程访问的代码
}
多线程实现方式:NSThread, performSelector , GCD 前两者属于过时。
多线程实现方式之一:最简单的performSelector
- (IBAction)runInBack:(id)sender {
//开始多线程处理任务
[self performSelectorInBackground:@selector(doWork)withObject:nil];
//开始多线程处理任务
[self performSelectorInBackground:@selector(doWork)withObject:nil];
//此处用来说明主线程也在运行
for (int a = 0;a<1000;a++) {
NSLog([NSStringstringWithFormat:@"此处用来说明主线程也在运行------------%i",a]);
}
}
- (void)doWork {
for (int i=0;i<10000;i++) {
NSLog(@"多线程运行。。。。。%i",i);
//返回主线程刷新UI
[self performSelectorOnMainThread:@selector(doneWork:)withObject:
[NSStringstringWithFormat:@"%i",i]waitUntilDone:NO];
}
}
- (void)doneWork:(NSString*)data {
self.noteLabel.text= [NSStringstringWithFormat:@"第%@次",data];
}
for (int a = 0;a<1000;a++) {
NSLog([NSStringstringWithFormat:@"此处用来说明主线程也在运行------------%i",a]);
}
}
- (void)doWork {
for (int i=0;i<10000;i++) {
NSLog(@"多线程运行。。。。。%i",i);
//返回主线程刷新UI
[self performSelectorOnMainThread:@selector(doneWork:)withObject:
[NSStringstringWithFormat:@"%i",i]waitUntilDone:NO];
}
}
- (void)doneWork:(NSString*)data {
self.noteLabel.text= [NSStringstringWithFormat:@"第%@次",data];
}
多线程实现方式之二:GCD
Dispatch Queue:两种
1.Serial Dispatch Queue 排队等待处理
2.Concurrent Dispatch Queue 直接处理,不等待。
/*新建线程队列 Dispatch_queue 的几个方法*/
//获取系统标准Dispatch_queue----global dispatch queue,所有应用程度都能够使用的concurrent dispatch queue,有四个执行优先级(high,default, low ,background)队列中的任务将会比较顺序执行。
dispatch_queue_t queue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
//获取系统标准Dispatch_queue----main dispatch queue,在主线程中执行的serial dispatch queue
dispatch_queue_t queue2 = dispatch_get_main_queue();
//新建Dispatch_queue----排队队列,先进先出
dispatch_queue_t queue3 = dispatch_queue_create("servial_queue2",DISPATCH_QUEUE_SERIAL);
//新建Dispatch_queue----分发队列,直接运行
dispatch_queue_t queue4 = dispatch_queue_create("concurrent_queue3",DISPATCH_QUEUE_CONCURRENT);
//获取系统标准Dispatch_queue----global dispatch queue,所有应用程度都能够使用的concurrent dispatch queue,有四个执行优先级(high,default, low ,background)队列中的任务将会比较顺序执行。
dispatch_queue_t queue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
//获取系统标准Dispatch_queue----main dispatch queue,在主线程中执行的serial dispatch queue
dispatch_queue_t queue2 = dispatch_get_main_queue();
//新建Dispatch_queue----排队队列,先进先出
dispatch_queue_t queue3 = dispatch_queue_create("servial_queue2",DISPATCH_QUEUE_SERIAL);
//新建Dispatch_queue----分发队列,直接运行
dispatch_queue_t queue4 = dispatch_queue_create("concurrent_queue3",DISPATCH_QUEUE_CONCURRENT);
dispatch_set_target_queue:设置执行优先级
dispatch_after 在指定时间后追加到队列。
dispatch_group 所有处理完成后可以用来结束队列。
dispatch_barrier_async 如果在concurrent队列中使用文件操作或者数据库操作可能会出现数据竞争,所以在多个处理中某个引起竞争的任务只能单独执行,如下:分发到任务四时只能单独执行,再处理追加的任务。
dispatch_async(queue, ^{reading...});
dispatch_async(queue, ^{reading2...});
dispatch_async(queue, ^{reading3...});
dispatch_barrier_async(queue,^{writing4...});
dispatch_async(queue, ^{reading5...});
dispatch_async(queue, ^{reading6...});
dispatch_async(queue, ^{reading7...});
dispatch_suspend(queue1);/dispatch_resume(queue); 挂起和恢复队列。
Dispatch I/O 将文件分成几块分发读取
多线程实现方式之三:NSThread
0 0
- IOS 线程
- ios 线程
- ios线程
- iOS 线程
- ios 线程
- IOS线程
- IOS---线程
- ios 线程
- ios 线程
- iOS 线程
- iOS 线程
- iOS线程
- IOS 线程
- ios 线程
- iOS 线程
- ios线程
- IOS-线程、线程池
- iOS 之多线程 NSThread
- Linux命令之"cp"
- Memcache基础教程
- PHP关于session浏览器丢失的相关问题
- 设计模式-桥接模式
- BAT设计师推荐的非常好用的15个优质SKETCH插件
- ios线程
- js,css 缓存不更新解决
- MobiCom2015阅读表(Poster)
- MyEclipse启动Tomcat报错“A configuration error occurred during startup”
- 使用Numpy和Scipy处理图像
- 【C++心路历程7】2839 如果世界漆黑 我的通分很美
- Unix/Linux C++应用开发-进程通信消息队列
- 在Windows 8使用Chrome打开文件时Class not registered(没有注册类)的另类解决办法
- c++排序函数详解