今天我醒来的时候,我认为这是一个很重要的想法,也可能是一个完全愚蠢的想法。我需要编写一个iOS应用程序,它使用大约5k像素正方形的巨大可滚动图像,由于内存限制无法在iOS上加载如此大的图像。
我确实知道CATileLayer
,但小滞后不符合我的要求。
所以我认为可以存储映射文件并从中读取图像。不幸的是它不起作用,这里是代码剪切:
NSError * __autoreleasing error = nil;
NSData * mappedData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"tigerbig" ofType:@"png"] options:NSDataReadingMappedAlways | NSDataReadingUncached error:&error];
UIImage * thebigImage =[UIImage imageWithData:mappedData];
self.imageView.image = thebigImage;
在图像视图必须显示大图像之前,一切似乎都有效。我记得UIImage
是CGImage
周围的一个小包装,在图像需要渲染之前它不会加载图像。
可能在从NSData
创建图像的序列中,数据被复制到RAM中,触发内存警告,而不是应用程序崩溃。
所以我尝试使用ImageIO
和CGDataProvider
进行varius组合,但没有成功。
现在我告诉自己,主要想法可能完全错了,有人能指出我正确的方向吗?