UIImageView的大小限制?

时间:2014-02-26 10:41:25

标签: ios objective-c uiimageview uiimage

我正在尝试在UIImageView中显示rather big image。图像正确下载(使用NSSessionDownloadTask),我可以从中创建UIImage,但是,UIImageView中没有显示任何内容。我没有得到任何内存警告或错误。谁知道发生了什么?

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
{  
    UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:location]];
    self.imageView.image = image;
    self.progressView.progress = 0.0f;
    [self.activityView stopAnimating];
    [self.activityView setHidden:YES];

    NSLog(@"Received full Image!"];
}

3 个答案:

答案 0 :(得分:3)

您的图片刚刚崩溃了我试图在4GB笔记本电脑上显示的Chrome标签。它还导致我的笔记本电脑在保存之前会有很多溅射。

这是一个36MB的jpeg压缩位图。 18K x 18K像素。我们来做一些数学。

根据分辨率,你总共有324亿像素。 324M像素。每个由内存中3个字节的颜色信息表示。一个很好的近似值就是1GB的原始像素数据。我不确定是否考虑了UIImage实例如何在内部存储。

鉴于以上情况以及最新(且功能强大)的iOS设备总共有1GB的RAM ,我认为即使有图像太大也是安全的不是固有的大小限制。

答案 1 :(得分:2)

我认为您正在尝试从后台线程设置imageView内容。任何UI更新都必须为您的主线程(主队列),以确保安全。尝试通过执行以下操作在主队列上设置UIImageView图像属性:

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
{  
    UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:location]];
    dispatch_async(dispatch_get_main_queue(), ^{
        self.imageView.image = image;
        self.progressView.progress = 0.0f;
        [self.activityView stopAnimating];
        [self.activityView setHidden:YES];
    });

    NSLog(@"Received full Image!"];
}

编辑:我上面写的内容仍然是正确的,但是因为 dandan78 指出你的图片太大了,上面的解决方案不太可能解决你的问题,因为你无法克服事实内存限制。

答案 2 :(得分:0)

确保您在主线程上。 UI无法从非主线程更改。你可以使用

[self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];

确保。