2010-10-17 60 views
0

我使用Tom Brow在GitHub上提供的LeavesView類。NSArray泄漏了很多圖像

在iPad上,我有23張圖像,分辨率爲1024x768,範圍從200-500KB(JPG)。我儘可能多地壓縮圖像而不會損失質量。出於某種原因,當我初始化圖像列表時,內存顯着下降,並最終崩潰。這裏有一些代碼:

- (id)init { 
    if (self = [super init]) { 
     images = [[[NSArray alloc] initWithObjects: 
       [UIImage imageNamed:@"001.jpg"], 
       [UIImage imageNamed:@"002.jpg"], 
       [UIImage imageNamed:@"003.jpg"], 
       [UIImage imageNamed:@"004.jpg"], 
       [UIImage imageNamed:@"005.jpg"], 
       [UIImage imageNamed:@"006.jpg"], 
       [UIImage imageNamed:@"007.jpg"], 
       [UIImage imageNamed:@"008.jpg"], 
       [UIImage imageNamed:@"009.jpg"], 
       [UIImage imageNamed:@"010.jpg"], 
       [UIImage imageNamed:@"011.jpg"], 
       [UIImage imageNamed:@"012.jpg"], 
       [UIImage imageNamed:@"013.jpg"], 
       [UIImage imageNamed:@"014.jpg"], 
       [UIImage imageNamed:@"015.jpg"], 
       [UIImage imageNamed:@"016.jpg"], 
       [UIImage imageNamed:@"017.jpg"], 
       [UIImage imageNamed:@"018.jpg"], 
       [UIImage imageNamed:@"019.jpg"], 
       [UIImage imageNamed:@"020.jpg"], 
       [UIImage imageNamed:@"021.jpg"], 
       [UIImage imageNamed:@"022.jpg"], 
       [UIImage imageNamed:@"cover.jpg"], 
       nil] autorelease]; 
    } 
    return self; 
} 

現在,在這段代碼中,我使用了autorelease。我還試圖:

-(void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 
    NSLog(@"memory warning"); 
    LeavesCache *lv =[LeavesCache alloc]; 
    [lv flush]; 
    [lv release]; 
    //[images release]; 
} 

,當然,在本例中,我只是用圖像和不其他對象我在視圖中使用:

-(void)viewDidUnload { 
    [super viewDidUnload]; 
    images = nil; 
} 
-(void)dealloc { 
    [images release]; 
    [super dealloc]; 
} 

當我使用自動釋放的圖像陣列, [圖片發佈];被註釋掉了,反之亦然,如果我不使用autorelease,我在dealloc中使用release。

現在,當我彈出視圖時,內存按預期恢復。這只是圖像在使用時似乎是HOG,我不知道另一種方式不使用圖像數組。

任何幫助將不勝感激。

回答

0

我能解決我的埃默裏泄漏有:

[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"001" ofType:@"jpg"]] 

我看到使用這種方法恢復的顯著量F的內存,並能夠阻止crases,希望這能幫助別人!