2013-09-26 24 views
5

我正在在IOS圖片庫應用程序,其中用戶可以瀏覽圖庫圖片。我使用了this示例代碼中啓用UIScrollView的分頁。一切正常。但問題是,當我滾動瀏覽頁面時,核心動畫對象的數量被創建並且它們從不釋放。IOS核心動畫的對象不會釋放


|Graph---|Category------------------|Live Bytes---|#Living----|#Transient 

|1-------|All Heap & Anonymous VM |58.69 MB-----|270335-----|828951 
|0-------|All Heap Allocations------|15.30 MB-----|269980-----|826939 
|0-------|All Anonymous VM----------|43.39 MB-----|355--------|2012  
|0-------|VM: CoreAnimation---------|27.01 MB-----|222--------|58 
|0-------|VM: CG image--------------|7.40 MB------|3----------|189  
|0-------|VM: UITextFieldLabel------|4.30 MB------|25---------|0 

使用儀器我觀察到,對於每個尋呼創建4-6對象。但他們不會,即使我離開了View Controller

我試圖消除使用下面的方法,每個尋呼後的層動畫釋放。但它不起作用。

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 

CGFloat pageHeight = CGRectGetHeight(self.ImageSlider.frame); 
NSUInteger page = floor((self.ImageSlider.contentOffset.y - pageHeight/2)/pageHeight) + 1; 
currentPage = page; 
delegate.currentPage = page; 
[delegate refreshTags]; 

[self unloadPageFromScrollView:currentPage-2]; 
[self unloadPageFromScrollView:currentPage+2]; 

[self loadScrollViewWithPage:currentPage - 1]; 
[self loadScrollViewWithPage:currentPage]; 
[self loadScrollViewWithPage:currentPage + 1]; 

} 

- (void)unloadPageFromScrollView:(NSUInteger)page 
{ 
    @autoreleasepool { 
     if (page > docList.count-1) { 
      return; 
     } 

    if ((NSNull *)[self.viewControllers objectAtIndex:page] != [NSNull null]) { 
     PageViewController1 *controller = [self.viewControllers objectAtIndex:page]; 
     for (CALayer* layer in [self.view.layer sublayers]) { 
       [layer removeAllAnimations]; 
     } 
     [controller.view removeFromSuperview]; 

     [self.viewControllers replaceObjectAtIndex:page withObject:[NSNull null]]; 

     } 
    } 

} 

如果有人知道如何釋放這些核心動畫對象,請幫助我。

+0

傢伙看起來像Core Animation的對象不是尋呼或'UIpageView'的結果。在頁面內部,我正在移動一些'UILabel'來定位它們。那就是動畫出現的地方。但是當我卸載頁面時,這些動畫不會釋放。我會發布答案如果我可以讓他們釋放。 –

回答

8

實測出所造成的內頁的是動畫。

裏面的pageViewControllerviewController將添加至scrollView作爲頁)viewWillDisappear:(BOOL)animated方法我加入這個

for (CALayer* layer in [self.view.layer sublayers]) 
    { 
     [layer removeAllAnimations]; 
    } 

它解決了這個問題。