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,我不知道另一種方式不使用圖像數組。
任何幫助將不勝感激。