2012-02-11 107 views
2

我有一個內存管理問題。 A有一個滾動視圖,其中的每個頁面都從視圖控制器陣列加載。 我加載頁面scrolview調用如下因素方法:如何在視圖控制器數組內部釋放視圖控制器?

- (void)loadScrollViewWithPage:(int)page { 

    if (page < 0) return; 
    if (page >= kNumberOfPages) return; 


    BancaTableViewController *controller = [viewControllers objectAtIndex:page]; 


    if ((NSNull *)controller == [NSNull null]) { 

     controller=[[BancaTableViewController alloc] initWithPageNumber:page]; 
     controller.banks=banks; 
     [controllersetDelegate:self]; 
     [viewControllers replaceObjectAtIndex:page withObject:controller]; 
     [controller release]; 
    } 

    // add the controller's view to the scroll view 
    if (nil == controller.view.superview) { 
     CGRect frame = scrollView.frame; 
     frame.origin.x = frame.size.width * page; 
     frame.origin.y = 0; 
     controller.view.frame = frame; 
     [scrollView addSubview:controller.view]; 
    } 


} 

這是我這卸載除了CURENT頁的控制器的所有控制器卸載視圖控制器方法,但它似乎並沒有工作,因爲內存不斷增加。

- (void)unloadScrollViewWithPage:(int)page { 
    for (unsigned i = 0; i < kNumberOfPages; i++) { 
     if(i!=page){ 
     [viewControllers replaceObjectAtIndex:i withObject:[NSNull null]]; 
     } 
    } 
} 

如何正確寫入unloadviewcontroller?

回答

2

您正在向scrollView添加一個硬指針,但您永遠不會刪除該對象。 (即您不斷添加子視圖滾動視圖,永不刪除它們。

嘗試......

添加標籤,就可以控制視圖,當你把它們添加到滾動視圖,然後加載之前將其刪除。一個新的控制器檢查語法 - 從內存 - 沒有測試

if ((NSNull *)controller == [NSNull null]) { 

    controller=[[BancaTableViewController alloc] initWithPageNumber:page]; 
    controller.banks=banks; 
    controller.tag = 3; 
    [controllersetDelegate:self]; 
    [viewControllers replaceObjectAtIndex:page withObject:controller]; 
    [controller release]; 
} 

// add the controller's view to the scroll view 
if (nil == controller.view.superview) { 
    CGRect frame = scrollView.frame; 
    frame.origin.x = frame.size.width * page; 
    frame.origin.y = 0; 
    controller.view.frame = frame; 
    [scrollView removeFromView:[scrollView viewWithTag:3]]; 
    [scrollView addSubview:controller.view]; 
} 
+0

謝謝你,我會嘗試,但怎麼樣我unloadScrollViewWithPage方法是正確的,它需要 – Alex 2012-02-11 16:33:30

+0

@Alexey難道該解決方案爲你工作??? ? – Ali 2012-11-10 13:06:50

相關問題