2013-10-08 26 views
0

我基於xib文件programmaticaly創建UIViews,並將它們添加到scrollView。這工作到目前爲止。如果數量發生變化,我重新創建了網格UIViews(在我的情況下稱爲主題大拇指)。我在重新創建新的之前刪除舊的。問題是內存永遠不會釋放,並且每一個新創建的內存使用都會堆積如山。即使我刪除了一個拇指,內存也不會被釋放。UIView不autoreleased。我的問題在哪裏?

儀器不顯示泄漏。 Dealloc在我的ViewController永遠不會被調用。我使用ARC,我知道我必須避免保留的引用。但很明顯,我已經使用過它們,但不明白它在哪裏。如果有人能夠給我一個提示,我會在這裏閱讀很多帖子,但仍然不理解。 NSZombiesEnabled已關閉。

我的代碼:

-(void)createGrid 
{ 
    for (UIView *subview in self.scrollView.subviews) { 
     if ([subview tag] < 10000 && ![subview isKindOfClass:[UIImageView class]]) { 
      [subview removeFromSuperview]; 
     } 
    } 
    int col = 0; 
    int row = 0; 
    [self setupFetchedResultsController]; 
    for (int i = 0; i<[[self.fetchedResultsController fetchedObjects] count]; i++) 
    { 
     col = i % THEME_COLUMNS; 
     row = i/THEME_COLUMNS; 
     ThemeThumbVC *themeThumb = [[ThemeThumbVC alloc] init]; 
     [self.scrollView addSubview:themeThumb.view]; 

     // configurate thumb 
     themeThumb.managedObjectContext = self.managedObjectContext; 
     themeThumb.fetchedResultsController = self.fetchedResultsController; 
     themeThumb.theme = [[self.fetchedResultsController fetchedObjects] objectAtIndex:i]; 
     [themeThumb.themeThumbImage setImage:[UIImage imageWithContentsOfFile:[[[self.fetchedResultsController fetchedObjects] objectAtIndex:i] iconImageURL]]]; 
     [themeThumb setTag:i]; 
     [themeThumb.view setTag:i]; 
     [themeThumb.view setFrame:CGRectMake(col*kThemeGritXOffset+(col*1), row*kThemeGritYOffset, kThemeGritXOffset+1, kThemeGritYOffset)]; 
     [self addChildViewController:(UIViewController*) themeThumb]; 
    } 
    [self.scrollView setContentSize:CGSizeMake(320, row*kThemeGritYOffset+kThemeGritYOffset)]; 
} 

回答

0

如果拇指視圖由子視圖控制器封裝,那麼你會不會需要在某一時刻刪除從父視圖控制器子視圖控制器?

如果未從父視圖控制器中刪除子視圖控制器,那麼我最好的猜測是子視圖控制器正在保留其拇指視圖。

你有沒有想過使用UICollectionViewController來創建一個網格的拇指視圖?

+0

我沒有添加子視圖控制器的嘗試。它沒有解決它。但也許有幾個保留對象。 是的UICollectionViewController會很好,但我的客戶也想在iOS 5.1上運行它,所以我不得不自行開發網格。希望這將在未來有時會改變,但現在我必須保持這樣。 – rockstarberlin

+0

我又試了一次,發現它實際上就是你提到過的:'addChildViewController'是設置剩餘參考的點。謝謝您的意見! – rockstarberlin