iOS中的NSOperation线程
2024-08-30 20:27:01
1、除NSThread之外的第二种多线程的编程方法
2、采用NSOperation(线程操作,通常用他的子类)和NSOperationQueue(线程队列)搭配来做多线程开发,采用NSOperation指定一个操作,把这个操作放到线程队列(线程池)中,让线程队列安排他的生命周期。
3、与NSThread有什么区别
(1)NSThread需要启动,也就是说需要费心管理线程的生命周期,而采用NSOperation方式只需要将线程放到线程队列中即可,线程队列负责管理、执行所有的线程操作
(2)管理线程的最大并发数,也就是同时执行的任务数
(3)控制线程之间的依赖关系,NSOperation之间可以设置依赖来保证执行顺序,比如一定要让操作1执行完后,才能执行操作2,线程之间不能相互依赖,不能A依赖B,B又依赖A
(4)队列的取消、暂停、恢复。
步骤:
1、创建视图
2、创建线程
3、创建线程队列
4、把线程放在线程队列中
3、创建线程队列
4、把线程放在线程队列中
5、在子线程加载网络资源
6、回到主线程
7、在主线程更新UI
下面以 NSBlockOperation和 NSOperationQueue 的搭配 为例:
#pragma mark NSBlockOperation和 NSOperationQueue 的搭配 - (void)viewDidLoad { [super viewDidLoad]; // 1、创建视图 imageView = [[UIImageView alloc]initWithFrame:CGRectMake(, , , )]; [self.view addSubview:imageView]; // 2、创建一个线程操作 NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{ // 5、加载网络资源 NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:kurl]]; UIImage *image = [UIImage imageWithData:data]; // 6、返回主线程 [[NSOperationQueue mainQueue]addOperationWithBlock:^{ // 7、在主线程更新UI imageView.image =image; }]; }]; // 3、创建一个线程队列 NSOperationQueue *operationQueue = [NSOperationQueue new]; // 4、把线程操作放到线程操作队列里 [operationQueue addOperation:blockOperation]; } @end
最新文章
- ASP.NET MVC Model验证(一)
- [Eclipse] - eclipse集成jboss7.1
- js 事件捕获与事件冒泡例子
- HDOJ 1690
- UVa 10817 Headmaster's Headache (状压DP+记忆化搜索)
- PHP vs Java
- spark-sql
- 从汇编看c++成员函数指针(二)
- MFC 关于对话框的注意点
- CAS在Java类中的应用
- Efounds笔试
- json-sever 配置与应用
- logback配置信息
- python for循环的遍历
- OxyPlot Controller OxyPlot控制器
- Ubuntu 16.04安装Maven
- REST-framework快速构建API--初体验
- JavaScript 新手的踩坑日记
- 域名与IP对应,解决只能IP访问不能域名访问的问题
- 矩阵&;行列式
热门文章
- [WPF 自定义控件]让Form在加载后自动获得焦点
- Scrapy框架的简单使用
- C#中实现文件重命名的方式
- PHPStudyLite启动不成功怎么办
- kali安装openvas
- Oracle 两个逗号分割的字符串,获取交集、差集的sql实现过程解析
- tomcat修改进程名称
- MATLAB实例:构造网络连接图(Network Connection)及计算图的代数连通度(Algebraic Connectivity)
- property用法,使Python中的get方法和set方法使用更简单
- AcWing 791. 高精度加法 解题记录