Ios UIImageView中的大小限制?

Ios UIImageView中的大小限制?,ios,objective-c,uiimageview,uiimage,Ios,Objective C,Uiimageview,Uiimage,我试图在UIImageView中显示一个。图像可以正确下载(使用NSSessionDownloadTask),我可以从中创建UIImage,但是,UIImageView中没有显示任何内容。我没有收到任何内存警告或错误。有人知道发生了什么吗 -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *

我试图在
UIImageView
中显示一个。图像可以正确下载(使用
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!"];
}

我认为您正在尝试从后台线程设置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!"];
}

编辑:我上面写的内容仍然正确,但正如丹丹78所指出的那样,您的图像太大,上面的解决方案不太可能解决您的问题,因为您无法克服事实上的内存限制。

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

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

为了确保这一点。

您的图像刚刚崩溃了Chrome选项卡,我试图在4GB笔记本电脑上显示它。这也导致我的笔记本电脑在保存前发出了相当多的声音

它是一个36MB jpeg压缩位图。18K x 18K像素。让我们做一些数学题

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


鉴于上述情况,以及最近(而且功能强大)的iOS设备总共有1GB的RAM,我认为可以肯定地说,即使没有涉及固有的大小限制,图像也太大了

上面的代码是在主运行循环上运行还是在后台线程/队列上运行?#检查image是否为nil。(旁注:您也可以使用[UIImage imageWithContentsOfFile:location.path]您设置了图像视图的帧了吗?图像不是零,帧是正常的,我正在主队列中运行该代码。我同意它一定与内存有关,但应用程序没有崩溃,它继续运行,并且我没有收到内存警告。这让我困惑…@cfisher这很奇怪。可能内存分配请求太大,以至于在某一点上,操作系统的响应相当于“什么?你一定是在开玩笑,我甚至都不会响应那一个”,让
UIImage
处于某种奇怪的半创建状态