IOS多线程_NSThread和NSInvocationOperation

//虽然现在在多线程方面大多都在用GCD,当其他方式我们还是应该有所了解,给大家介绍一下NSThread和NSInvocationOperation的简单用法


@interface yxpViewController ()

{

    UIImageView *_imageView;

    

    //声明一个队列

    NSOperationQueue *_operationQueue;

}


@end


@implementation yxpViewController


- (void)viewDidLoad

{

    [super viewDidLoad];

    //初始化操作队列

    _operationQueue = [[NSOperationQueue alloc] init];

    

     //在这里限定了该队列只同时运行一个线程

    [_operationQueue setMaxConcurrentOperationCount:1];

    

    //初始化一_ImageView

    _imageView=[[UIImageView alloc] initWithFrame:CGRectMake(10, 70, 300, 450)];

    _imageView.backgroundColor=[UIColor grayColor];

    _imageView.animationDuration=3.0;

    _imageView.animationRepeatCount=0;

    [self.view addSubview:_imageView];

    

    //下面两种方法添加一个线程

    

    //创建一个NSInvocationOperation对象,并初始化到方法

    //在这里,selector参数后的值是你想在另外一个线程中运行的方法(函数,Method)

    //在这里,object后的值是想传递给前面方法的数据

    NSInvocationOperation* theOp = [[NSInvocationOperation alloc] initWithTarget:self

                                                                      selector:@selector(addTaskMethod:) object:_imageView];

    // Operation加入到队列中

    [_operationQueue addOperation:theOp];

    

    //[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=[[NSArray alloc] initWithObjects:url1,url2,url3,url4,url5, nil];

    

    NSMutableArray *imageArray=[[NSMutableArray alloc] initWithCapacity:20];

    for (NSString *string in array) {

        UIImage *image=[self getImageFromURL:string];

        [imageArray addObject:image];

    }

    

    _imageView.animationImages=imageArray;

    

    //回到主线程调用 在非线程中不能调用有关UI线程(主线程)的方法的,你可以直接调用一下看是否有效

    [self performSelectorOnMainThread:@selector(startImageViewAnimating) withObject:nil waitUntilDone:YES];

}

- (void)startImageViewAnimating

{

    [_imageView  startAnimating];

}

//下载图片的方法

-(UIImage *) getImageFromURL:(NSString *)fileURL {

    NSLog(@"执行图片下载函数");

    UIImage * result;

    NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]];

    result = [UIImage imageWithData:data];

    return result;

}


- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end


IOS多线程_NSThread和NSInvocationOperation,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。