這是我的第一篇文章,你是我最後的希望。UIImageViews添加到UIScollView永遠不會被釋放,內存泄漏?
我有我的iPad應用程序的圖像列表,如果你選擇一個,我MyViewController
類延伸UIViewController
加載和顯示(通過只設置window.rootViewController
,通過使用UINavigationController
,通過presentModalViewController
- 都試過了,不會使任何差異)。它有一個UIScrollView
內,這更增加了UIScrollView
一個大版本的圖像與此代碼:
UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[[delegate getImageNames] objectAtIndex:(gameNr*2)]]];
tempImageView.frame = CGRectMake(0,0,tempImageView.frame.size.width/2,tempImageView.frame.size.height/2);
[self setMyImage:tempImageView];
[tempImageView release];
myScrollView.contentSize = CGSizeMake(myImage.frame.size.width, myImage.frame.size.height);
myScrollView.maximumZoomScale = 2.0;
myScrollView.minimumZoomScale = 1.0;
myScrollView.clipsToBounds = YES;
myScrollView.bounces = NO;
myScrollView.delegate = self;
[myScrollView addSubview: myImage];
myImage
是類型UIImageView
我MyViewController
內(nonatomic, retain)
屬性。
按下一個按鈕,返回到圖像列表後,我鬆開參考MyViewController
和它的dealloc方法被調用是這樣的:
- (void)dealloc
{
CFShow(@"dealloc!");
for(UIImageView *subview in [myScrollView subviews]) {
if(subview.frame.size.width > 20){
[subview removeFromSuperview];
[subview setImage:nil];
}
}
[myImage setImage:nil];
self.myScrollView = nil;
self.myImage = nil;
[myScrollView release];
[myImage release];
[super dealloc];
}
它的工作至今,但問題是,圖像的記憶並沒有真正的釋放。在打開和關閉約12張圖像後,該應用程序崩潰並伴有內存警告。 這也通過我從這裏得到的report_memory方法得到證實: iOS Low Memory Crash, but very low memory usage
調用dealloc方法,這是三重檢查。 我通過調試器中的斷點檢查了變量myImage
和myScrollView
,它們被dealloc
方法中的那些命令設置爲0x0。爲什麼內存沒有釋放????????
感謝您的任何建議,因爲我整整三天都在努力工作,這讓我發瘋。
感謝您的快速回復。 更改代碼,就像你寫導致崩潰: - [UIImageView的發行]:消息發送到釋放實例0x1c1320 在這裏,您在.H問代碼: IBOutlet中的UIScrollView * myScrollView; ... } @property(nonatomic,retain)IBOutlet UIScrollView * myScrollView; ... 正如你所看到的,我沒有自己調用alloc,因爲它被加載到一個nib文件中。 這可能是問題嗎? 問候 邁克爾 –
然後一切都很好。 – Nekto
如果您不添加此圖片,一切正常嗎? – Nekto