-(UIImage *)getImageFromURL:(NSURL *)imageURL{ __block UIImage *image = [UIImage new]; PHFetchResult *result = [PHAsset fetchAssetsWithALAssetURLs:@[imageURL] options:nil]; PHAsset *asset = result.firstObject; PHImageManager *manager = [PHImageManager defaultManager]; [manager requestImageForAsset:asset targetSize:CGSizeMake(100, 100) contentMode:PHImageContentModeAspectFit options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { image = result; }]; return image; } the code in block "image = result" execute after code out of block "return image" , so it always return nil. How can i make the code in block execute first. Use thread or NSOperation or GCD?