从Images.xcassets加载图像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Images.xcassets加载图像相关的知识,希望对你有一定的参考价值。

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

答案

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

你的应用程序加载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方法,在系统缓存中缓存图像。因此,如果您重复使用它,您将不必担心从文件重新加载它。

以上是关于从Images.xcassets加载图像的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 swift 将 Images.xcassets 中的图像加载到 UIImage 中

从iOS 8框架加载图像

如何将 Images.xcassets 中的图像加载到 UIImage 中

在 Storyboard 的 UIImageView 中使用 Images.xcassets 中的启动图像?

无法从 CocoaPods 中的 .xcasset 加载图像

如何本地化 Images.xcassets 中的图像?