iOS8 多线程Multithreading简介
来源:互联网 发布:西安新榜样软件 编辑:程序博客网 时间:2024/06/07 06:39
多线程(Multithreading)
队列(queues)
在iOS中多线程主要是关于“队列”。队列中使用“块”。块被队列提取出来,在相关的线程上执行。
主队列(main queue)
所有的UI活动都必须且只能在在主队列上执行。
相对地,那些消耗内存的非UI活动必须在其他队列上执行。
总之,原则是让UI响应起来。
其他的队列
多数情况下,iOS帮我们建立好了其他的队列。
1.两种方式建立主队列
dispatch_queue_t mainQ = dispatch_get_main_queue();
NSOperationQueue *mainQ = [NSOperationQueue mainQueue];
2.建立其他队列
dispatch_queue_t otherQ = dispatch_queue_create(“name”, NULL);//name是字符型常量
3.在主队列上调用方法
- (void)performSelectorOnMainThread:(SEL)aMethod
withObject:(id)obj
waitUntilDone:(BOOL)waitUntilDone; dispatch_async(dispatch_get_main_queue(), ^{ /*调用的方法 */ });
4.多线程示例
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL urlWithString:@“http://...”]];
NSURLConfiguration *configuration = …;
//下面在主队列上建立session,这样就可以在task中处理UI
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration
delegate:nil
delegateQueue:[NSOperationQueue mainQueue]];
NSURLSessionDownloadTask *task;
task = [session downloadTaskWithRequest:request
completionHandler:^(NSURL *localfile, NSURLResponse *response, NSError *error) {
/* 可以在此处处理UI/ }];
//如果要在此处处理一些非UI进程,最好很快, 千万不要阻碍主队列!
[task resume];
当然,如果session不在主队列,而你想做一些UI的事情,那么可以在主队列上使用“块”。
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration]; //不在主队列上
NSURLSessionDownloadTask *task;
task = [session downloadTaskWithRequest:request
completionHandler:^(NSURL *localfile, NSURLResponse *response, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{ /* do UI things */ });
or [self performSelectorOnMainThread:@selector(doUIthings) withObject:nil waitUntilDone:NO];
}];
[task resume];
- iOS8 多线程Multithreading简介
- 多线程(Multithreading)
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记31 Multithreading多线程
- 多线程(multithreading)基础
- 多线程:C++11 multithreading
- 14. (多线程)Multithreading
- .net多线程探索(multiThreading)
- multithreading
- java 多线程(multithreading)(一)
- ios swift多线程的实现 Multithreading
- Multithreading - 同一进程中的多线程能共享进程资源么?
- 多线程简介
- 多线程简介
- 多线程简介
- 多线程简介
- 多线程简介
- 多线程简介
- 多线程简介
- grep awk sed区别(转)
- ContentValues
- if(1<4<5)逻辑运算符的错误解析
- matlab 安装 vl_feat
- 我来了!
- iOS8 多线程Multithreading简介
- khjkjhjk
- Python自省(反射)指南
- Python正则表达式指南
- 在64位的windows server 2003运行IIS6运行32位的.NET程序
- 一些html元素
- [汉诺塔][第二阶段-汉诺塔入门][HDOJ-1995]汉诺塔V
- python float处理
- 位移动画