1

今天我醒来时想到了一个我认为是一个伟大的想法或一个完全愚蠢的想法。我需要编写一个使用大约 5k 像素正方形的巨大可滚动图像的 iOS 应用程序,由于内存限制,无法在 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 中触发内存警告,而不是应用程序崩溃。
所以我也尝试过使用ImageIOand CGDataProviders 进行各种组合,但没有任何成功。
现在我告诉自己,主要想法可能完全错误,有人能指出我正确的方向吗?

4

0 回答 0