0

我正在尝试制作像相册一样的视图。但图像文件很大(2048x1536,png)。加载几张图像需要相当长的时间。所以制作了加载图像的线程.. 首先..为图像持有者制作 UIButton。

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];
}

它运作良好。在正常情况下。但是如果有很多图像和内存警告发生。应用程序崩溃,没有任何错误消息。你能给我小费来解决它吗?我怀疑有大图像引起的内存问题..

4

1 回答 1

0

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

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

于 2013-01-22T18:43:27.847 回答