从Images.xcassets加载图像

问题描述 投票:2回答:1

我试图从捆绑中加载超过100个图像,但最近我只是好奇什么是从捆绑动态加载图像的最佳做法。自定义Images.xcassets是否允许我执行此类任务?如何动态加载NSArray?

ios objective-c cocoa-touch ios7 ios6
1个回答
7
投票

从我的答案开始,我会建议,不要这样做。

你的应用程序加载100个图像并将它们一次存储在内存中真的有点过分了,应用程序肯定会受到一些内存压力。

在Xcode 5中,.xcassets仍然是将图像保存在应用程序包中的最佳位置。有关更多详细信息,您可能对Apple Asset Catalog文档感兴趣。但是,我建议您不要将图像加载和存储到NSArray,而是将它们的标识符(实际上是添加到.xcassets中的图像名称)存储在数组中。如果您事先将图像标识符存储到某些NSString* const也会有所帮助。

因此,您的编码结构应如下所示:

//image names
NSString* const kImage1 = @"image1";
NSString* const kImage2 = @"image2";
NSString* const kImage3 = @"image3"; 
//...etc

NSArray* imageIdentifiers = @[kImage1, kImage2, kImage3,...];

//...

然后从您可以使用的包中加载单个图像:

UIImage* img = [UIImage imageNamed:kImage3]; //loads image3 from bundle and caches

或者遍历您可能使用的所有图像:

for (NSString* identifier in imageIdentifiers) {
    @autoreleasepool { //make sure your image data gets disposed after use
        UIImage* img = [UIImage imageNamed:identifier];
        //... use img, etc.
    }
}

最后,imageNamed:类的UIImage方法,在系统缓存中缓存图像。因此,如果您重复使用它,您将不必担心从文件重新加载它。

© www.soinside.com 2019 - 2024. All rights reserved.