Ios 将大型图像异步加载到相册式视图中

Ios 将大型图像异步加载到相册式视图中,ios,asynchronous,load,uiimage,Ios,Asynchronous,Load,Uiimage,我正在努力使视图像相册一样。但图像文件相当大(2048x1536,png)。加载多个图像需要相当长的时间。所以制作了加载图像的线程。。 首先,为图像支架制作一个按钮 UIButton* thumbnail = [[UIButton alloc] initWithFrame:r]; [[self scroll] addSubview:thumbnail]; [thumbnail release]; 并启动用于图像加载的线程 [NSThread detachNewThreadSelector:@s

我正在努力使视图像相册一样。但图像文件相当大(2048x1536,png)。加载多个图像需要相当长的时间。所以制作了加载图像的线程。。 首先,为图像支架制作一个按钮

UIButton* thumbnail = [[UIButton alloc] initWithFrame:r];
[[self scroll] addSubview:thumbnail];
[thumbnail release];
并启动用于图像加载的线程

[NSThread detachNewThreadSelector:@selector(th_load_filelist) toTarget:self withObject:nil];
线程在这里

-(void) th_load_filelist
{
   NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];    
   for (UIButton* bt in [self.scroll subviews])
   {
      UIImage* img = [[UIImage alloc] initWithContentsOfFile:(NSString*)bt.tag];
      [[bt layer] performSelectorOnMainThread:@selector(setContents:) withObject:(id)[img CGImage] waitUntilDone:YES];
      [img release];
   }

   [pool release];
}
它工作得很好。在正常情况下。 但是,如果有许多图像和记忆警告发生。 应用程序在没有任何错误消息的情况下崩溃。 你能给我修的小费吗?
我怀疑是大图像导致内存问题。

问题不是加载同步还是异步,而是加载到内存中的像素数量。你的应用程序正在被系统杀死,因为它使用了太多内存


为了解决这个问题,我会让服务器提供一个1:1大小的图像(对于非视网膜iphone为320x480),然后再提供一个不会加载到内存中的较大图像。然后,如果需要(放大或在更高分辨率的屏幕上显示),我只会将较大的图像加载到内存中(如UIImage)。

以下是有关如何解决此问题的更多想法: