仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3317|回复: 19
打印 上一主题 下一主题

[学习教程] IOS设计iOS多线程编程之NSOperation和NSOperationQueue的利用仓酷云

[复制链接]
冷月葬花魂 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-18 11:30:22 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
管理你的ViewController的层次可以自己写View切换的动画关掉他默认的动画文档:还有个蛋疼的UIWindow都快忘了他了因为iOS是从MacosX过来的很多工具直接拿来用这个UIWindow就是在iOS里每个App独占屏幕所以同时存在的只有一个UIWindow前一篇
《iOS多线程编程之NSThread的利用》

先容三种多线程编程和NSThread的利用,这篇先容NSOperation的利用。
利用NSOperation的体例有两种,

一种是用界说好的两个子类:

NSInvocationOperation和NSBlockOperation。
另外一种是承继NSOperation

假如你也熟习Java,NSOperation就和java.lang.Runnable接口很类似。和Java的Runnable一样,NSOperation也是计划用来扩大的,只需承继重写NSOperation的一个办法main。相称与java中Runnalbe的Run办法。然后把NSOperation子类的对象放进NSOperationQueue行列中,该行列就会启动并入手下手处置它。
NSInvocationOperation例子:

和后面一篇博文一样,我们完成一个下载图片的例子。新建一个SingleViewapp,拖放一个ImageView控件到xib界面。
完成代码以下:

  • #import"ViewController.h"
  • #definekURL@"http://avatar.csdn.net/2/C/D/1_totogo2010.jpg"

  • @interfaceViewController()

  • @end

  • @implementationViewController

  • -(void)viewDidLoad
  • {
  • [superviewDidLoad];
  • NSInvocationOperation*operation=[[NSInvocationOperationalloc]initWithTarget:self
  • selector:@selector(downloadImage:)
  • object:kURL];

  • NSOperationQueue*queue=[[NSOperationQueuealloc]init];
  • [queueaddOperation:operation];
  • //Doanyadditionalsetupafterloadingtheview,typicallyfromanib.
  • }

  • -(void)downloadImage:(NSString*)url{
  • NSLog(@"url:%@",url);
  • NSURL*nsUrl=[NSURLURLWithString:url];
  • NSData*data=[[NSDataalloc]initWithContentsOfURL:nsUrl];
  • UIImage*image=[[UIImagealloc]initWithData:data];
  • [selfperformSelectorOnMainThread:@selector(updateUI:)withObject:imagewaitUntilDone:YES];
  • }
  • -(void)updateUI:(UIImage*)image{
  • self.imageView.image=image;
  • }

  • viewDidLoad办法里能够看到我们用NSInvocationOperation建了一个背景线程,而且放到NSOperationQueue中。背景线程实行downloadImage办法。
  • downloadImage办法处置下载图片的逻辑。下载完成后用performSelectorOnMainThread实行主线程updateUI办法。
  • updateUI并把下载的图片显现到图片控件中。
运转能够看到下载图片显现在界面上。

<br>
第二种体例承继NSOperation

在.m文件中完成main办法,main办法编写要实行的代码便可。
怎样把持线程池中的线程数?

行列里能够到场良多个NSOperation,能够把NSOperationQueue看做一个线程池,可往线程池中增加操纵(NSOperation)到行列中。线程池中的线程可看做消耗者,从行列中取走操纵,并实行它。
经由过程上面的代码设置:
[queuesetMaxConcurrentOperationCount:5];
线程池中的线程数,也就是并发操纵数。默许情形下是-1,-1暗示没无限制,如许会同时运转行列中的全体的操纵。

管理所有设备发生的事件比如屏幕旋转屏幕关闭或者一些其他的程序的控制逻辑也应该写在这里他的初始化函数是-(id)initWithNibName:(NSString*)nibNamebundle:(NSBundle*)nibBundle后面那个NibName是InterfaceBuilder里设计的界面现在IB已经集成到XCode里了
第二个灵魂 该用户已被删除
19#
发表于 2015-7-12 20:29:26 | 只看该作者
近期由于IOS7的发布,所以应用的适配潮可谓是都搞的锣鼓喧天,甚是热闹,因此呢,因适配IOS7而产生的问题也是铺天盖地的卷来,
若相依 该用户已被删除
18#
发表于 2015-7-1 22:46:43 | 只看该作者
其实在培训的过程中,学习到最多的就是查资料的方式,当时感觉老师好坑,什么都不告诉我们,让我们自己去查,但是现在觉得还是要自己解决问题,这样才能理解的更加深入。
分手快乐 该用户已被删除
17#
发表于 2015-6-20 10:39:32 | 只看该作者
其实在培训的过程中,学习到最多的就是查资料的方式,当时感觉老师好坑,什么都不告诉我们,让我们自己去查,但是现在觉得还是要自己解决问题,这样才能理解的更加深入。
山那边是海 该用户已被删除
16#
发表于 2015-5-7 17:00:48 | 只看该作者
要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。
老尸 该用户已被删除
15#
发表于 2015-4-21 12:39:34 | 只看该作者
学习ios没什么捷径,关键在于多动手敲,曾看到前辈开玩笑说怎么快速学会某技术,答案是:“提高打字速度,快点写代码就能快点学会了”。
14#
发表于 2015-4-21 09:30:09 | 只看该作者
同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。
谁可相欹 该用户已被删除
13#
发表于 2015-4-8 15:32:15 | 只看该作者
我也从简单的状态栏适配开始,先研究了下关于状态栏的适配,特总结如下,供广大网友一起讨论交流。
兰色精灵 该用户已被删除
12#
发表于 2015-4-7 11:19:49 | 只看该作者
要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。
灵魂腐蚀 该用户已被删除
11#
发表于 2015-3-26 23:55:41 | 只看该作者
我也从简单的状态栏适配开始,先研究了下关于状态栏的适配,特总结如下,供广大网友一起讨论交流。
爱飞 该用户已被删除
10#
发表于 2015-3-20 18:12:14 | 只看该作者
中国如今已然发展成为一个软件大国,软件人才的数量跃居全球之首。当然,在苹果平台的开发领域,也保持了相当强劲的发展势头。然而,很多初入iOS开发门槛的开发者,
精灵巫婆 该用户已被删除
9#
发表于 2015-3-19 17:39:20 | 只看该作者
中国如今已然发展成为一个软件大国,软件人才的数量跃居全球之首。当然,在苹果平台的开发领域,也保持了相当强劲的发展势头。然而,很多初入iOS开发门槛的开发者,
变相怪杰 该用户已被删除
8#
发表于 2015-3-12 02:48:38 | 只看该作者
最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。
简单生活 该用户已被删除
7#
发表于 2015-3-5 09:28:24 | 只看该作者
自从苹果公司开放iOS SDK以来,大量的国内外的软件开发者将关注的目光聚集在苹果的iOS平台上。由于iPhone和iPad自一出现就给人带来了颠覆性的感觉
莫相离 该用户已被删除
6#
发表于 2015-2-16 20:51:09 | 只看该作者
down下code4app网站的每个分类的代码挨着看
若天明 该用户已被删除
5#
发表于 2015-2-10 02:55:21 | 只看该作者
最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。
柔情似水 该用户已被删除
地板
发表于 2015-2-9 23:26:35 | 只看该作者
在百度搜索你想要了解的类名(苹果的cocoa和cocoatouch框架的类名很有特点很容易搜到,前缀都是NS or UI),看别人写的博客详解
透明 该用户已被删除
板凳
发表于 2015-2-4 13:23:29 | 只看该作者
好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。
金色的骷髅 该用户已被删除
沙发
发表于 2015-1-28 10:08:16 | 只看该作者
自从苹果公司开放iOS SDK以来,大量的国内外的软件开发者将关注的目光聚集在苹果的iOS平台上。由于iPhone和iPad自一出现就给人带来了颠覆性的感觉
冷月葬花魂 该用户已被删除
楼主
 楼主| 发表于 2015-1-21 08:52:56 | 只看该作者
众多研发人员积极参与到iOS平台的开发中来也就不足为奇了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 19:45

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表