由于在目标c iOS中异步图像加载,图像的宽度和高度为零

时间:2017-03-31 13:19:45

标签: ios objective-c iphone ios8 ios10

我试图从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作为值。

提前致谢

2 个答案:

答案 0 :(得分:0)

如果您的NSLog电话紧接在dispatch_async之后,那么它将始终显示为零 - 只需将该打印件移至完成处理程序内

答案 1 :(得分:0)

因为你正在使用 GCD。这意味着你告诉编译器一次完成2个任务。所以首先他编译GCD块之外的代码,即dispatch_asyn之后它编译GCD代码。

为了确认我的答案,你可以设置一个断点,你可以检查,或者你可以先在控制台中查看打印的数据。

在你的情况下,数据是在GCD中获取的,所以在它不获取数据之前它总是为0。

希望它可以帮助您了解您在代码中的实际操作。