2012-09-10 35 views
-1

我在我的應用程序WEPopoverController顯示彈出過,IOS流行過[WEPopoverController]轟然

出現的用戶後自敗點擊一個按鈕,

它工作正常了一些時間, 但其他時候崩潰,就像如果我打開我並關閉了很多次會崩潰,所以我不知道在這個對象的內存管理缺少什麼即時通訊,

- (void)showPopOver 
{ 

    if(!self.navPopover) { 
      CGRect frame ; 
     frame = CGRectMake(0, 0, 270, 132); 

     UIViewController *viewCon = [[UIViewController alloc] init]; 

     viewCon.contentSizeForViewInPopover = frame.size; 

     self.navPopover = [[WEPopoverController alloc] initWithContentViewController: viewCon]; 

     [self.navPopover setDelegate:self]; 

    } 

    if([self.navPopover isPopoverVisible]) { 
     [self.navPopover dismissPopoverAnimated:YES]; 
     [self.navPopover setDelegate:nil]; 
     //[self.navPopover autorelease]; 
     self.navPopover = nil; 

     [self.navPopover release]; 

     //[_navPopover release]; 
     NSLog(@"sconda"); 
    } else if (![self.navPopover isPopoverVisible]){ 



     [self.navPopover presentPopoverFromRect:CGRectMake(134,440, 50, 96) 


             inView:self.view 
         permittedArrowDirections: UIPopoverArrowDirectionDown 

     animated:YES]; 

     NSLog(@"tanga"); 
    } 


} 

非常感謝,

+2

是否有一個特定的原因,你爲什麼不使用ARC? – dandan78

回答

2

重:內存管理,這肯定是錯誤的:

self.navPopover = nil; 
[self.navPopover release]; 

通過指針的指針,你不釋放對象。顛倒這些代碼行的順序

[self.navPopover release]; 
self.navPopover = nil; 
+0

是的,它是正確的,但它不會導致崩潰... – holex

+0

通過內存泄漏耗盡內存將最終導致崩潰 – CSmith

1

你有DidDismissPopover嗎?

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { 
self.navPopover = nil; 
} 

你應該做的解僱這種方式,而不是dissmising在showPopover

啊,不要在這裏釋放

[self.navPopover release]; 
NSLog(@"sconda");