博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NSOperation
阅读量:7259 次
发布时间:2019-06-29

本文共 2439 字,大约阅读时间需要 8 分钟。

hot3.png

- (void)viewDidLoad {

    [super viewDidLoad];

    [self begin];

}

#pragma mark 开启多线程

-(void)begin{

    //创建一个操作队列

    NSOperationQueue *opertion=[[NSOperationQueue alloc]init];

    opertion.maxConcurrentOperationCount=5;//设置最大并发线程数

    //向队列添加操作

//    for (int i=0; i<IMAGE_COUNT; i++) {

//        //方法一:创建操作块,添加到队列

//        NSBlockOperation *block=[NSBlockOperation blockOperationWithBlock:^{

//            [self loadImage:i];

//        }];

//        //添加

//        [opertion addOperation:block];

//        

//        //方法二:祷文invocation

//        NSInvocationOperation *invoca=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(loadImageI:) object:[NSNumber numberWithInt:i]];

//        [opertion addOperation:invoca];

//     }

    //方法三:控制线程的执行顺序

    NSMutableArray *arrayOper=[[NSMutableArray alloc]init];

    for (int i=0; i<IMAGE_COUNT; i++) {

        NSBlockOperation *op1=[NSBlockOperation blockOperationWithBlock:^{

            [self myThread:[NSNumber numberWithInt:i]];

        }];

        [arrayOper addObject:op1];

    }

    //依赖设置

    for (int i=0; i<IMAGE_COUNT-1; i++) {

        [arrayOper[i+1] addDependency:arrayOper[i]];

        

    }

    

    for (int i=0; i<IMAGE_COUNT; i++) {

        [opertion addOperation:arrayOper[i]];

    }

    

 

}

//方法一;

-(void)loadImage:(NSNumber *)index{

    NSThread *thread=[[NSThread alloc]initWithTarget:self selector:@selector(myThread:) object:[NSNumber numberWithInt:[index intValue]]];

    if ([index intValue]==14) {

        thread.threadPriority=1;

        

    }else{

        thread.threadPriority=0;

    }

    thread.name=[NSString stringWithFormat:@"线程:%@",index];//给线程命名

    [thread start];//执行线程  (启动线程,并不代表立即执行。而是出于一种就绪状态,当系统调用时才真正执行)

}

-(void)myThread:(NSNumber *)sender{

    NSLog(@"%@",[NSThread currentThread].name);//打印当前线程的名字

    //当不是最后一个线程的时候

//    if (![sender isEqual:@8]) {

//        //线程休眠2秒

//        [NSThread sleepForTimeInterval:2];

//    }

    NSData *data=[NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@",_arrI[sender.intValue]]]];

    [[NSOperationQueue mainQueue]addOperationWithBlock:^{

        UIImage *imaged=[UIImage imageWithData:data];

        UIImageView *image=_muarr[[sender intValue]];

        image.image=imaged;

    }];

 

//    NSArray *array=@[data,sender];

//    //这个方法是NSObject的分类方法,每个NSObject对象都有这个方法

//    [self performSelectorOnMainThread:@selector(mainThreadHandle:) withObject:array waitUntilDone:YES];

}

#pragma mark  回归主线程的一个更新UI的方法

//-(void)mainThreadHandle:(NSArray *)senders{

//    

//    UIImage *imaged=[UIImage imageWithData:senders[0]];

//    UIImageView *image=_muarr[[senders[1] intValue]];

//    image.image=imaged;

//}

 

 

//方法二:

//-(void)loadImageI:(NSNumber *)number{

//

//}

转载于:https://my.oschina.net/6104zhang/blog/745205

你可能感兴趣的文章
网络工程师的爱情...
查看>>
struts2
查看>>
ZOJ - 3981 - Balloon Robot (思维)
查看>>
s:property 获取 ValueStack中的值
查看>>
String.replace
查看>>
一次性事务和CTE插入数据的比较
查看>>
RHEL6基础之一系统内核Kernel与GNU计划及Linux发行版本
查看>>
网络问题真的很怪
查看>>
Calendar日历类和GregorianCalendar公历类用法的一个小结
查看>>
NoSQL -- php应用redis、mongodb
查看>>
Nginx 配置全解析(一)
查看>>
java中的URLEncoder和URLDecoder类的联系与区别
查看>>
我的友情链接
查看>>
Redis 连接池配置及redis操作
查看>>
MDT2012/13功能测试(1)—向MDT工作台添加资源
查看>>
NFS文件系统
查看>>
ExtJs的tab
查看>>
mysql安装
查看>>
pip笔记(译)
查看>>
python基础(七)——网络编程
查看>>