我已经创建了一个应用程序,它有一个图像库。我已经将图像导入到Xcode中的资源文件夹中,并且当应用程序加载时,它们当前将它们加载到appDelegate中的数组中。每次都发生这种情况。我现在担心,随着图书馆的发展,应用程序将耗尽内存。有没有更好的方法来加载这些?加载iphone nsmutablearray图像库的最佳方式(600+项目)
结构是
库>类别>图像列表>图像
我有一个NSMutableArray称为mainLibrary
我然后添加另一NSMutableArray的每个类别。例如,
NSMutableArray *arrHome = [[NSMutableArray alloc] initWithObjects: @"Home",
[NSDictionary dictionaryWithObjectsAndKeys: [NSString stringWithFormat:@"%@/%@", resourcePath, @"alarm_clock.png"], @"image_path", @"Alarm Clock", @"title", nil],
[NSDictionary dictionaryWithObjectsAndKeys: [NSString stringWithFormat:@"%@/%@", resourcePath, @"bathtub.png"], @"image_path",@"Bathtub", @"title", nil],
nil];
[mainLibrary addObject: arrHome];
以上是针对“家庭”类别,并且只包含两个图像。对于其他类别,每个图像都有NSDictionary行 - 每个类别最多可以有100个图像。
如果我将50MB图像加载到数组中,这会导致应用程序无响应 - 或者更可能是因为它使用了更多每个应用程序的24mb(ish)配额而导致崩溃?
我想知道是否应该执行上面的代码并读入数组一次选择了一个类别 - 但这可能会导致它失去用户。
有什么想法?
ps)我还需要对Retina显示器有一个想法。 600多个图像,复制它们意味着我的二进制大小会火箭!
谢谢 - 我认为,我正确地做到了。这些数组被设置为字符串 - 只有当我需要图像时,我才会说“为objectatindex:X绘制图像”。我主要关心的是数组花费时间来填充 - 基本上有600行来填充库数组 - 然后保留以供以后使用。这种做法行得通吗?非常感谢。 – 2010-11-01 10:49:50
以这种方式创建600个字符串不应该花费太长时间,而且如果它在分析中显示的话,减少它的方法并不是非常困难。我会使用'initWith ...'方法来处理这个大小的集合。这实际上是一个优化,因为它会减少函数中消耗的最大内存,并且会减少autorelease池中的工作量。除此之外,您可以创建一个代表resourcePath,imagePath和title的NSObject子类,而不是使用字典。 – justin 2010-11-01 11:08:25