2012-02-11 17 views
2

メモリ管理に問題があります。 Aはスクロールビューを持ち、その中のすべてのページがView Controllerの配列からロードされます。 私はfolowingメソッドを呼び出すscrolviewページをロードします。View Controllerの配列内のView Controllerを解放するにはどうすればいいですか?

- (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]; 
    } 


} 

これは海流ページのコントローラを除くすべてのコントローラをアンロードし、私のアンロードビューコントローラのメソッドですが、メモリが増加し続けるために動作するようには思えません。

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

unloadviewcontrollerを正しく書き込むにはどうすればよいですか?

答えて

2

scrollViewにハードポインタを追加していますが、オブジェクトを削除することはありません。 (つまり、あなたはscrollViewにサブビューを追加し続けると、それらを削除することはありません。

あなたが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方法については、それが正しいとすると、それは@Alexeyがあなたのためにそのソリューションの作業を行った – Alex

+0

必要とされている。???を? – Ali

関連する問題