2013-10-03 29 views
1

我有這樣的代碼辭退的UIViewController不釋放內存

-(void)didPressButton:(int)tag 
    { 
     // Preventivi? 
     if (tag == 0) 
     { 
      if (addPrev == nil) 
       addPrev = [[avvAddPreventivoViewController alloc] init]; 
      addPrev.delegate = self; 
      UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:addPrev]; 
      navigationController.navigationBarHidden  = NO; 
      [[navigationController navigationBar] setBarStyle:UIBarStyleBlack]; 
      [self presentViewController:navigationController animated:YES completion:nil]; 
      addPrev = nil; 

     } 
    } 

當我出現在addPrev的內存增加,當炫耀的內存沒有釋放。 當addPrev解僱它時觸發協議方法,didCancel。我攔截它和釋放addPrev

-(void)didCancel 
    { 
     [self dismissViewControllerAnimated:YES completion:nil]; 
     addPrev = nil; 
    } 

enter image description here

+0

這意味着一些其他對象具有對視圖控制器的引用。你需要使用儀器來確定參考是什麼。 – rmaddy

+0

addPrev被稱爲只有一次,因爲在我寫的代碼... – giuseppe

+0

你確定你正在使用ARC嗎?如果您關閉了ARC,您顯示的圖形就是典型的代碼。 – Kedar

回答

1

Niling也導航控制器大大改善了存儲器分配。 另外,請注意釋放可以在推送的控制器的dealloc中釋放的內容。

-(void)didPressButton:(int)tag 
    { 
     // Preventivi? 
     if (tag == 0) 
     { 
      if (addPrev == nil) 
       addPrev = [[avvAddPreventivoViewController alloc] init]; 
      addPrev.delegate = self; 
      UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:addPrev]; 
      navigationController.navigationBarHidden  = NO; 
      [[navigationController navigationBar] setBarStyle:UIBarStyleBlack]; 
      [self presentViewController:navigationController animated:YES completion:nil]; 
      addPrev = nil; 
      navigationController = nil; 

     } 
    }