Ios 将大型图像异步加载到相册式视图中
我正在努力使视图像相册一样。但图像文件相当大(2048x1536,png)。加载多个图像需要相当长的时间。所以制作了加载图像的线程。。 首先,为图像支架制作一个按钮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
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)。以下是有关如何解决此问题的更多想法: