iphone 12如何 - 分析iOS中的Assets.car文件




ios介绍 ios什么意思 (5)

我试图减少目前48MB的iOS应用程序的整体大小。 当我分析子文件夹时,我发现Assets.car占用了41MB。 我无法打开并看到哪一个占用了那么多空间。

我找不到有关Assets.car文件的任何好文档。 有人可以建议如何查看内容吗?


Answers

通用二进制文件似乎包含每个屏幕密度的多个图像分辨率。

将应用程序上传到App Store后,文件大小将小于通用二进制文件,因为每个设备只能获得适当的图像密度。

您可以在此处检查文件大小:iTunes Connect>我的应用程序>您的应用程序>活动>您的构建> App Store文件大小




Guilherme Rambo说是正确的,而不是Lewis42。

假设在Asserts.car中有一个pdf文件('a.pdf')。

如果使用cartool,文件格式已被更改,您将获得三个png文件(a.png / a @ 2x.png / a @ 3x.png)。

但是,如果您使用AssetCatalogTinkerer,则可以预览a.pdf文件(未更改文件格式)。


我使用近似相同的方法构建了这样的应用程序,除了:

  • 我将生成的图像缓存在磁盘上,并提前在一个单独的线程中生成两到三个图像。
  • 我不覆盖UIImage ,而是在缩放为1时在图层中绘制图像。发出内存警告时,这些图块将自动释放。

每当用户开始缩放时,我都会获取CGPDFPage并使用适当的CTM进行渲染。 在- (void)drawLayer: (CALayer*)layer inContext: (CGContextRef) context中的代码如下所示:

CGAffineTransform currentCTM = CGContextGetCTM(context);    
if (currentCTM.a == 1.0 && baseImage) {
    //Calculate ideal scale
    CGFloat scaleForWidth = baseImage.size.width/self.bounds.size.width;
    CGFloat scaleForHeight = baseImage.size.height/self.bounds.size.height; 
    CGFloat imageScaleFactor = MAX(scaleForWidth, scaleForHeight);

    CGSize imageSize = CGSizeMake(baseImage.size.width/imageScaleFactor, baseImage.size.height/imageScaleFactor);
    CGRect imageRect = CGRectMake((self.bounds.size.width-imageSize.width)/2, (self.bounds.size.height-imageSize.height)/2, imageSize.width, imageSize.height);
    CGContextDrawImage(context, imageRect, [baseImage CGImage]);
} else {
    @synchronized(issue) { 
        CGPDFPageRef pdfPage = CGPDFDocumentGetPage(issue.pdfDoc, pageIndex+1);
        pdfToPageTransform = CGPDFPageGetDrawingTransform(pdfPage, kCGPDFMediaBox, layer.bounds, 0, true);
        CGContextConcatCTM(context, pdfToPageTransform);    
        CGContextDrawPDFPage(context, pdfPage);
    }
}

问题是包含CGPDFDocumentRef的对象。 我同步我访问pdfDoc属性的部分,因为我释放它并在接收memoryWarnings时重新创建它。 看来CGPDFDocumentRef对象做了一些内部缓存,我没有找到如何摆脱。





ios iphone ios7 ios6