我试图从捆绑中加载超过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
方法,在系统缓存中缓存图像。因此,如果您重复使用它,您将不必担心从文件重新加载它。