我已經創建了一個應用程序,它有一個圖像庫。我已經將圖像導入到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