iphone多线程简介————关于NSOperation的使用(转自henry-sea的博客)
来源:互联网 发布:红外光谱数据库 编辑:程序博客网 时间:2024/06/18 05:45
是的,本来operationQueue的目的就是多线程管理,那多线程,可不只是一个线程。
而且我们可以设置这个队列每次被处理的“操作”数量
这里的setMaxConcurrentOperationCount就是同时被处理的“操作数”,参数为整数int或NSInteger (两个是一样的,不记得的可以在我的博客里面搜索一下噢~)
2,那main函数应该怎么写?
main函数中其实只需要写你要在另外一个进程里面作的事情。比如对于我来说,我常常只是作一个简单的事情,那我会用NSInvocationOperation,NSOperation的简化版。比如说:
在doSomeThing函数里面,我可以从网上读取一些东西,但是读取是需要占用时间,而堵塞主线程的。而使用NSOperation这样使用就不会了。
而如果是NSOperation,虽然复杂了一些,又是做一个NSOperation的子类。其实main函数做得事情和doSomeThing是一抹一样的。只不过如果你制作这个子类,你对其操作的内容可以更多,可以制作更复杂的读取,载入操作等等,而且你可以重复使用这个类功能阿。再者,NSOperation也提供了对runtime操作的支持,不过那就太麻烦了,一般不大用的上。
================================================================================================================
多线程编程是防止主线程堵塞,增加运行效率等等的最佳方法。而原始的多线程方法存在很多的毛病,包括线程锁死等。在Cocoa中,Apple提供了NSOperation这个类,提供了一个优秀的多线程编程方法。
本次讲解NSOperation的使用方法:
1,将想在另外一个线程的工作单独成类,并设置其父类为NSOperation:
2,借由其初始化方法来传入所需要的参数和对象
呼叫这个类对象的时候,传入所需要的参数和对象
3,在我们的线程操作类中的main函数执行所需要的工作
这些就是一个简单的NSOperation的使用过程了。其实看看嘛,非常简单的,正如苹果为我们准备的其他API一样!
==================================================一个例子=================================================
1、将想在另外一个线程的工作单独成类,并设置其父类为NSOperation
- @interface ImageLoadingOperation : NSOperation {
- //需要传入一个图片地址,所以定义一个NSURL变量
- NSURL *imageURL;
- //由于需要返回一些值,所以需要一个对象参数返回要被返回的对象(运行此线程的类对象)
- id target;
- //返回值要激发的方法函数
- SEL action;
- }
2、借由其初始化方法来传入所需要的参数和对象
- - (id)initWithImageURL:(NSURL *)theImageURL target:(id)theTarget action:(SEL)theAction
- {
- self = [super init];
- if (self) {
- //拷贝进对象,并retain
- imageURL = [theImageURL retain];
- target = theTarget;
- action = theAction;
- }
- return self;
- }
初始化这个类的时候,传入所需要的参数和对象
- //这些是需要对其初始化的类中的代码
- //初始化
- ImageLoadingOperation *operation = [[ImageLoadingOperation alloc] initWithImageURL:url target:self action:@selector(didFinishLoadingImageWithResult:)];
- //添加到运行队列
- [operationQueue addOperation:operation];
- //由于队列对其retain,所以需要release它
- [operation release];
3、在线程操作类中的main函数执行所需要的工作
- - (void)main
- {
- //载入图片
- NSData *data = [[NSData alloc] initWithContentsOfURL:imageURL];
- UIImage *image = [[UIImage alloc] initWithData:data];
- //打包返回给初始类对象,然后执行其指定的操作
- NSDictionary *result = [NSDictionary dictionaryWithObjectsAndKeys:image, ImageResultKey, imageURL, URLResultKey, nil];
- [target performSelectorOnMainThread:action withObject:result waitUntilDone:NO];
- [data release];
- [image release];
- }
这些就是一个简单的NSOperation的使用过程。
- iphone多线程简介————关于NSOperation的使用(转自henry-sea的博客)
- 多线程——NSOperation
- 多线程——NSOperation
- 《多线程——NSOperation》
- 多线程—NSOperation
- NSOperation多线程的使用
- iOS 多线程 NSOperation的简单使用——iOS 编码复习(八)(多线程6)
- Henry的VB.NET之旅(八)—接口
- Henry的VB.NET之旅(八)—接口
- Henry手记—使用Template Method设计模式的.NET事件处理机制(一)
- Henry手记—使用Template Method设计模式的.NET事件处理机制(二)
- iOS —— NSThread、NSOperation、GCD多线程的优缺点
- iOS多线程总结(3)——NSOperation与NSOperationQueue的使用
- 《多线程——自定义NSOperation》
- 多线程—NSOperation和NSOperationQueue
- Henry手记—Web Form中的Datagrid的自定义分页(转)
- iOS多线程NSOperation的使用
- 多线程:NSOperation 的基本使用
- ASE12.5.4 Error: 2823接着报current process infected with 11的处理
- Ubuntu下gedit打开文本乱码问题的解决方法
- sqldeveloper 没有找到msvcr71.dll因此这个应用程序未能启动
- 使用Intel编译器(0)基础(2)基本块Basic Block
- C# 类的组成原理简要剖析
- iphone多线程简介————关于NSOperation的使用(转自henry-sea的博客)
- google api8
- Android电池状态监听实例1(下)
- Android开发之屏幕属性
- VC 如何通过api与MySQL数据库连接
- StructLayout特性
- csdn的博客积分如何计算(转载)
- SYBASE 12.5 维护手册 2. 日常维护篇
- Struts2 +jquery+ajaxfileupload 实现无刷新上传文件