我试图从dispatch_async函数中获取图像宽度和高度,但它得到的结果为零。
以下是我的代码
dispatch_async(dispatch_get_main_queue(), ^{
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://url%@",[[arrayEvents objectAtIndex:j] valueForKey:@"image"]]]];
//NSData *imageData = [NSData dataWithContentsOfURL:url];
UIImage *images = [[UIImage alloc]initWithData:imageData];
CGFloat height = images.size.height;
CGFloat width = images.size.width;
ratio_2=scrrenwidth/width;
scaledHeight_2=height*ratio_2;
img_vw2.image=[UIImage imageWithData:imageData];
});
NSLog(@"%f",scaledHeight_2);
当我在dispatch_async
内打印时,我得到了正确的图像高度和宽度,但当我在dispatch_async
之外打印时,它会将0
作为值。
提前致谢
答案 0 :(得分:0)
如果您的NSLog
电话紧接在dispatch_async
之后,那么它将始终显示为零 - 只需将该打印件移至完成处理程序内
答案 1 :(得分:0)
因为你正在使用
GCD。这意味着你告诉编译器一次完成2个任务。所以首先他编译GCD块之外的代码,即dispatch_asyn
之后它编译GCD代码。
为了确认我的答案,你可以设置一个断点,你可以检查,或者你可以先在控制台中查看打印的数据。
在你的情况下,数据是在GCD中获取的,所以在它不获取数据之前它总是为0。
希望它可以帮助您了解您在代码中的实际操作。