标签:
NSOperation
优点:不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上。
NSOperation实例封装了需要执行的操作和执行操作所需的数据,并且能够以并发或非并发的方式执行这个操作。
NSInvocationOperation *operation=[[NSInvocationOperationalloc]initWithTarget:selfselector:@selector(run1) object:nil];
//执行操作
[operation start];
//注意:操作对象默认在主线程中执行,只有添加到队列中才会开启新的线程。即默认情况下,如果操作没有放到队列queue中,都是同步执行。只有将NSOperation放到一个NSOperationQueue中,才会异步执行操作
NSInvocationOperation *operation1 = [[NSInvocationOperationalloc] initWithTarget:selfselector:@selector(run1) object:nil];
[operation1 start];
//2.NSBlockOperation
NSBlockOperation *block=[NSBlockOperationblockOperationWithBlock:^{
NSLog(@"block操作:%@",[NSThreadcurrentThread]);
}];
//在NSBlockOperation对象中添加一个操作,如果NSBlockOperation对象至少包含了多个操作,有一个是主线程中执行,其他均在子线程中
[block addExecutionBlock:^{
NSLog(@"block操作1:%@",[NSThreadcurrentThread ]);
}];
[block addExecutionBlock:^{
NSLog(@"block操作2:%@",[NSThreadcurrentThread ]);
}];
[block addExecutionBlock:^{
NSLog(@"block操作3:%@",[NSThreadcurrentThread ]);
}];
[block start];
//注意:添加操作要放在start之前
//创建队列:将操作放入队列中(主队列除外)默认的在子线程中执行,且不用手动start
NSOperationQueue *queue=[[NSOperationQueuealloc]init]; //NSOperationQueue的作?:NSOperation可以调?start?法来执?任务,但默认是同步执行的。如果将NSOperation添加到NSOperationQueue(操作队列)中,系统会自动异步执行NSOperation中的操作。添加操作到NSOperationQueue中,自动执行操作,自动开启线程
NSInvocationOperation *qoperation=[[NSInvocationOperationalloc]initWithTarget:selfselector:@selector(run2) object:nil ];
[queue addOperation:qoperation];
[queue addOperationWithBlock:^{
NSLog(@"block操作队列:%@",[NSThreadcurrentThread ]);
}];
}
-(void)run1{
NSLog(@"22222%@",[NSThreadcurrentThread]);
}
-(void)run2{
NSLog(@"队列中执行:%@",[NSThreadcurrentThread]);
}
标签:
原文地址:http://www.cnblogs.com/wyhwyh2114/p/5033691.html