2011-09-28 52 views
0

這是我的第一篇文章,你是我最後的希望。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是類型UIImageViewMyViewController(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方法,這是三重檢查。 我通過調試器中的斷點檢查了變量myImagemyScrollView,它們被dealloc方法中的那些命令設置爲0x0。爲什麼內存沒有釋放????????

感謝您的任何建議,因爲我整整三天都在努力工作,這讓我發瘋。

回答

0

替換此:

self.myScrollView = nil; 
self.myImage = nil; 

[myScrollView release]; 
[myImage release]; 

與此:

[myScrollView release]; 

self.myScrollView = nil; 
self.myImage = nil; 

和POST代碼中定義屬性myScrollViewinit它。

而且你不需要循環for(UIImageView *subview in [myScrollView subviews])。當你將releasemyScrollView對象時,它會自動釋放它的所有子視圖。

+0

感謝您的快速回復。 更改代碼,就像你寫導致崩潰: - [UIImageView的發行]:消息發送到釋放實例0x1c1320 在這裏,您在.H問代碼: IBOutlet中的UIScrollView * myScrollView; ... } @property(nonatomic,retain)IBOutlet UIScrollView * myScrollView; ... 正如你所看到的,我沒有自己調用alloc,因爲它被加載到一個nib文件中。 這可能是問題嗎? 問候 邁克爾 –

+0

然後一切都很好。 – Nekto

+0

如果您不添加此圖片,一切正常嗎? – Nekto