如何在[nsthread detachNewThreadSelector]中使用块

时间:2015-06-22 08:11:29

标签: ios iphone block nsthread

我正在使用一个块来在asynchronus调用中下载图像。我知道如何以这种方式使用块

 [self getimage:url block:^(UIImage *img) 
 {
    passblock(img);
 }];

但我不知道如何在这个

中使用块
 [NSThread detachNewThreadSelector:@selector(getimage:block:) toTarget:self withObject:string];

当这个块在nsthread中获得回调以及如何处理它时。

执行此错误时我得到的是错误的访问

 -(void)getimage:(id)strimage block:(imageblock)block
 {
  NSData *data=[NSData *data=[NSData dataWithContentsOfURL:[NSURL      URLWithString:strimage]];
UIImage* image = [UIImage imageWithData:strurl];
 block(image);
 }

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

传递给detachNewThreadSelector的选择器必须只有一个参数。

Source

答案 1 :(得分:0)

改为使用GCD:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [self getimage:url block:^(UIImage *img) {
        // You might want to use dispatch_async(dispatch_get_main_queue()) here
        passblock(img);
    }];
});

答案 2 :(得分:0)

dispatch_async(dispatch_get_main_queue(), ^{
    //call your method here 
});

//在你的方法中取两个参数,使detachNewThreadSelector只传递一个参数。更好地使用上面的代码并用更多的参数调用你的方法。