我正在努力制作像相册一样的视图。但是图像文件很大(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];
}
效果很好。在正常情况下。 但如果有很多图像和内存警告发生。 应用程序崩溃,没有任何错误消息。 你能帮我解决一下吗? 我怀疑有大图像引起的内存问题..
答案 0 :(得分:0)
问题不在于加载同步与异步,而是您加载到内存中的像素数量。您的应用程序被系统杀死,因为它使用了太多内存。
要解决这个问题,我会让服务器同时提供1:1大小的图像(非视网膜iphone为320x480),然后提供不会加载到内存中的较大图像。然后,如果我需要它(放大或显示在更高分辨率的屏幕上),我只会将更大的图像加载到内存(例如UIImage)中。