从Images.xcassets加载图像

时间:2014-05-09 20:40:03

标签: ios objective-c cocoa-touch ios7 ios6

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

1 个答案:

答案 0 :(得分:7)

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

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

在Xcode 5中,.xcassets仍然是将图片保存在应用包中的最佳位置。有关详细信息,您可能对Apple Asset Catalog文档感兴趣。但是,我建议您将数据库(实际上是添加到.xcassets中的图像名称)存储在数组中,而不是将图像加载和存储到NSArray。如果您事先将图像标识符存储到某些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方法将图像缓存在系统缓存中。因此,如果您重复使用它,则不必担心从文件重新加载它。