关于NSOperation
来源:互联网 发布:卡卡西实力如何知乎 编辑:程序博客网 时间:2024/05/29 06:56
1,operationQueue 里边应该可以同时添加多个operation吧?
是的,本来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的使用过程。
- 关于NSOperation
- 关于NSOperation
- 关于 NSOperation 的取消
- 关于GCD NSOperation
- NSOperation
- NsOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- 解决WINCE6.0新建工程编译出错的问题
- 5个快如闪电的Word格式化技巧
- linux学习笔记(四) 退出文件编辑(vi)
- 条款6:若不想使用编译器自动生成的的函数,就该明确拒绝
- iBatis自动生成的主键 返回主键 (Oracle,Sql Server,Mysql,SQLite)
- 关于NSOperation
- SQL截取字符串
- WINCE6.0下开始菜单的“挂起(suspend)”是否可见及阻止系统进入睡眠模式
- 与TCL风雨同行
- Android中SQLite应用详解
- Run DTS from stored procedure
- Backus–Naur Form
- JSP重定向和转发
- 计算完美HASH