Ios 获取从NSInvocationOperation返回的结果

Ios 获取从NSInvocationOperation返回的结果,ios,nsinvocation,nsinvocationoperation,Ios,Nsinvocation,Nsinvocationoperation,返回调用或方法的结果。 -(id)结果 返回值 方法返回的对象或包含返回值的NSValue对象(如果不是对象)。如果方法或调用未完成执行,则此方法返回nil。 对于图像,我总是得到nil。 上面的代码有什么问题?对NSOperationQueue的操作在单独的线程上执行。调用[downloadImageOperation result]时,操作尚未完成执行,因此结果为nil 例如,您可以在downloadImageSync:方法的末尾指定图像视图,但必须在主线程上完成: - (void)view

返回调用或方法的结果。 -(id)结果 返回值 方法返回的对象或包含返回值的NSValue对象(如果不是对象)。如果方法或调用未完成执行,则此方法返回nil。

对于图像,我总是得到
nil

上面的代码有什么问题?

NSOperationQueue
的操作在单独的线程上执行。调用
[downloadImageOperation result]
时,操作尚未完成执行,因此结果为
nil

例如,您可以在
downloadImageSync:
方法的末尾指定图像视图,但必须在主线程上完成:

- (void)viewDidLoad
{        
    NSOperationQueue *operationQueue = [[NSOperationQueue alloc]init];        
    NSInvocationOperation *downloadImageOperation = [[NSInvocationOperation alloc] initWithTarget:[ImageDownloader getInstance]
                                                                            selector:@selector(downloadImageSync:)
                                                                              object:@"image url"];
    [operationQueue addOperation:downloadImageOperation];        
    UIImage *imag = [downloadImageOperation result]; // image is always nil here
    imageVIEW.image = imag;
}

NSOperationQueue
上的操作在单独的线程上执行。调用
[downloadImageOperation result]
时,操作尚未完成执行,因此结果为
nil

例如,您可以在
downloadImageSync:
方法的末尾指定图像视图,但必须在主线程上完成:

- (void)viewDidLoad
{        
    NSOperationQueue *operationQueue = [[NSOperationQueue alloc]init];        
    NSInvocationOperation *downloadImageOperation = [[NSInvocationOperation alloc] initWithTarget:[ImageDownloader getInstance]
                                                                            selector:@selector(downloadImageSync:)
                                                                              object:@"image url"];
    [operationQueue addOperation:downloadImageOperation];        
    UIImage *imag = [downloadImageOperation result]; // image is always nil here
    imageVIEW.image = imag;
}