我正在尝试从捆绑中加载100多个图像,但最近我只是好奇从捆绑中动态加载图像的最佳做法是什么。自定义Images.xcassets是否允许我执行此类任务?如何动态加载NSArray?
答案 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
方法将图像缓存在系统缓存中。因此,如果您重复使用它,则不必担心从文件重新加载它。