首先,简单区分这几个类关键词:
NSOperation:可以理解程一个“操作”,一个要做的事件,感觉类似如java中的runnable,NSOperation只有添加到线程队列中才能被执行。
NSOperationQueue:可以勉强的叫做线程队列吧,他是专门管理添加到他里面NSOperation,然后根据情况,开启线程执行对应的“操作”,java作用,也有对应的类,或者我们自己写一个队列。
NSOperationQueue的目的就是多线程管理,一个NSOperationQueue 操作队列,就相当于一个线程管理器,而非一个线程。因为你可以设置这个线程管理器内可以并行运行的的线程数量等等。
复杂点的做法是,自己写一个NSOperation的子类,类似于java中的,实现runnable接口,里面可以加更多复杂的逻辑,然后将他加到NSOperationQueue中,就ok啦
NSOperation:可以理解程一个“操作”,一个要做的事件,感觉类似如java中的runnable,NSOperation只有添加到线程队列中才能被执行。
NSOperationQueue:可以勉强的叫做线程队列吧,他是专门管理添加到他里面NSOperation,然后根据情况,开启线程执行对应的“操作”,java作用,也有对应的类,或者我们自己写一个队列。
NSOperationQueue的目的就是多线程管理,一个NSOperationQueue 操作队列,就相当于一个线程管理器,而非一个线程。因为你可以设置这个线程管理器内可以并行运行的的线程数量等等。
下面是建立并初始化一个操作队列,而且我们可以设置这个队列每次被处理的“操作(NSOperation)”数量:
NSOperationQueue *aQ = [[NSOperationQueue alloc] init];
[aQ setMaxConcurrentOperationCount:10];
然后,我们后面就可以建立需要操作的任务啦,然后加到操作队列中,就可以实现队多线程啦,ios中,使用NSInvocationOperation(NSOperation的子类)是最简单的多线程编程方式,在iPhone编程中是经常被用到的
/创建一个NSInvocationOperation对象,并初始化到方法
//在这里,selector参数后的值是你想在另外一个线程中运行的方法(函数,Method)
//在这里,object后的值是想传递给前面方法的数据
NSInvocationOperation* theOp = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(myTaskMethod:) object:data];
// 下面将我们建立的操作“Operation”加入到本地程序的共享队列中(加入后方法就会立刻被执行)
// 更多的时候是由我们自己建立“操作”队列
[aQ addOperation:theOp];
// 这个是真正运行在另外一个线程的“方法”
- (void)myTaskMethod:(id)data
{
// Perform the task.
}
简单介绍之后,其实可以发现这种方法是非常简单的。很多的时候我们使用多线程仅仅是为了防止主线程堵塞,而NSInvocationOperation就是最简单的多线程编程,故该中方式在iPhone编程中是经常被用到的。
复杂点的做法是,自己写一个NSOperation的子类,类似于java中的,实现runnable接口,里面可以加更多复杂的逻辑,然后将他加到NSOperationQueue中,就ok啦
来源:oschina
链接:https://my.oschina.net/u/173728/blog/114464