iOS multiple threads(2)------NSOperation NSOper...

    首先,简单区分这几个类关键词:
NSOperation:能够理解程一个“操做”,一个要作的事件,感受相似如java中的runnable,NSOperation只有添加到线程队列中才能被执行。
NSOperationQueue:能够勉强的叫作线程队列吧,他是专门管理添加到他里面NSOperation,而后根据状况,开启线程执行对应的“操做”,java做用,也有对应的类,或者咱们本身写一个队列。
NSOperationQueue的目的就是多线程管理,一个NSOperationQueue 操做队列,就至关于一个线程管理器,而非一个线程。由于你能够设置这个线程管理器内能够并行运行的的线程数量等等。

下面是创建并初始化一个操做队列,并且咱们能够设置这个队列每次被处理的“操做(NSOperation)”数量: java

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啦
相关文章
相关标签/搜索