IOS多线程_NSThread和NSInvocationOperation
来源:互联网 发布:sshd 知乎 编辑:程序博客网 时间:2024/05/16 23:40
//虽然现在在多线程方面大多都在用GCD,当其他方式我们还是应该有所了解,给大家介绍一下NSThread和NSInvocationOperation的简单用法
@interfaceyxpViewController ()
{
UIImageView *_imageView;
//声明一个队列
NSOperationQueue *_operationQueue;
}
@end
@implementation yxpViewController
- (void)viewDidLoad
{
[superviewDidLoad];
//初始化操作队列
_operationQueue = [[NSOperationQueuealloc]init];
//在这里限定了该队列只同时运行一个线程
[_operationQueuesetMaxConcurrentOperationCount:1];
//初始化一_ImageView
_imageView=[[UIImageViewalloc]initWithFrame:CGRectMake(10,70,300, 450)];
_imageView.backgroundColor=[UIColorgrayColor];
_imageView.animationDuration=3.0;
_imageView.animationRepeatCount=0;
[self.viewaddSubview:_imageView];
//下面两种方法添加一个线程
//第一种
//创建一个NSInvocationOperation对象,并初始化到方法
//在这里,selector参数后的值是你想在另外一个线程中运行的方法(函数,Method)
//在这里,object后的值是想传递给前面方法的数据
NSInvocationOperation* theOp = [[NSInvocationOperationalloc] initWithTarget:selfselector:@selector(addTaskMethod:)object:_imageView];
//当然也可以选择直接调用start方法开始,不过这个样做是同步的,也就是说还是要等后台线程执行完成才执行主线程
//[theOp start];
// Operation加入到队列中 是theOp和主线程同时执行,也就是异步线程,这样才能达到我们的效果
[_operationQueueaddOperation:theOp];
//第二种
//用[NSThread detachNewThreadSelector:@selector(addTaskMethod:) toTarget:self withObject:nil]; 也可以增加一个线程 等效于上一种
//[NSThread detachNewThreadSelector:@selector(addTaskMethod:) toTarget:self withObject:nil];
}
// 运行另外一个线程的方法
- (void)addTaskMethod:(id)data
{
NSString *url1=@"http://h.hiphotos.baidu.com/image/w%3D230/sign=b2d5c289123853438ccf8022a311b01f/91ef76c6a7efce1b1ae9f92fad51f3deb58f6510.jpg";
NSString *url2=@"http://h.hiphotos.baidu.com/image/pic/item/d058ccbf6c81800aae834e8bb33533fa838b47d5.jpg";
NSString *url3=@"http://d.hiphotos.baidu.com/image/pic/item/f2deb48f8c5494eec3ba65132ff5e0fe99257e1b.jpg";
NSString *url4=@"http://g.hiphotos.baidu.com/image/pic/item/a6efce1b9d16fdfa81f4ace4b68f8c5494ee7b1b.jpg";
NSString *url5=@"http://g.hiphotos.baidu.com/image/pic/item/d6ca7bcb0a46f21f70031fdbf4246b600c33ae07.jpg";
NSArray *array=[[NSArrayalloc]initWithObjects:url1,url2,url3,url4,url5,nil];
NSMutableArray *imageArray=[[NSMutableArrayalloc]initWithCapacity:20];
for (NSString *stringin array) {
UIImage *image=[selfgetImageFromURL:string];
[imageArrayaddObject:image];
}
_imageView.animationImages=imageArray;
//回到主线程调用 在非线程中不能调用有关UI线程(主线程)的方法的,你可以直接调用一下看是否有效
[selfperformSelectorOnMainThread:@selector(startImageViewAnimating)withObject:nilwaitUntilDone:YES];
}
- (void)startImageViewAnimating
{
[_imageView startAnimating];
}
//下载图片的方法
-(UIImage *) getImageFromURL:(NSString *)fileURL {
NSLog(@"执行图片下载函数");
UIImage * result;
NSData * data = [NSDatadataWithContentsOfURL:[NSURLURLWithString:fileURL]];
result = [UIImageimageWithData:data];
return result;
}
- (void)didReceiveMemoryWarning
{
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
- IOS多线程_NSThread和NSInvocationOperation
- iOS 多线程之NSInvocationOperation
- iOS 多线程 NSInvocationOperation
- ios多线程之NSInvocationOperation
- iOS-NSInvocationOperation多线程
- 多线程_NSThread
- iOS 开发,用 NSInvocationOperation 和 OperationQueue 做多线程操作
- [IOS 开发] 多线程之 NSBlockOperation和NSInvocationOperation的区别
- iOS学习笔记-114.多线程13——NSOperationQueue和NSInvocationOperation合用实现多线程
- IOS多线程之NSThread、NSOperation、NSInvocationOperation
- IOS多线程之NSThread、NSOperation、NSInvocationOperation
- 多线程NSOperation--NSInvocationOperation 和 NSBlockOperation 使用(一)
- 多线程_NSThread主要属性介绍
- 多线程之NSInvocationOperation NSInvocationOperation & NSOperationQueue
- IOS学习笔记23—多线程之NSThread、NSOperation、NSInvocationOperation
- IOS学习笔记23—多线程之NSThread、NSOperation、NSInvocationOperation
- IOS学习笔记23—多线程之NSThread、NSOperation、NSInvocationOperation
- IOS学习笔记23—多线程之NSThread、NSOperation、NSInvocationOperation
- 用JavaScript怎么实现页面跳转
- Datatable和实体还有实体集List的区别与转化
- mysql变量使用
- LeetCode——Sort Colors
- JTextArea重新可用后光标显示的问题
- IOS多线程_NSThread和NSInvocationOperation
- 多校第二场 简单排序计算
- MYSQL SHOW VARIABLES简介
- 绑定服务
- Jquery----------选择器的使用
- Android照片墙完整版,完美结合LruCache和DiskLruCache
- STL distance
- debug模式很慢的解决办法
- poj-2240-Arbitrage-spfa-最短路