1

可以说我有一个弹出窗口。当一个按钮被点击时,弹出窗口必须被分配和呈现。当关闭按钮委托被调用时,它必须被正确地关闭和移除。由于某种原因,我认为我没有正确执行此操作:

在 .h 文件中:

@interface MainViewControoler : UIViewController
{
PopupViewController*            popupView;     
}

@property (retain, nonatomic) PopupViewController* popupView;
@end

在 .m 文件中:

..
-(void)openButtonPressed
{
  if (!popupView)
  {  
    popupView = [[PopupViewController alloc] init];
    popupView.delegate = self;
  }
  [self.view addSubview:popupView.view];
  popupView.view.frame = self.view.frame;
}

..
-(void)closePopup
{
  [popupView.view removeFromSuperview];
}

我不希望这个有任何泄漏,如果弹出窗口打开和关闭 1000 次,它不会崩溃....这是正确的方法吗?

4

1 回答 1

1

您的代码不会产生泄漏,因为您分配了一次弹出框。但是,您不需要手动创建实例变量,或者将 popover 属性设置为 nil,ARC 会处理这一点,除非您还想在释放 VC 之前释放 popover。

只要确保您没有多次将弹出视图添加到父视图(即openButtonPressed在调用closePopup.

。H:

@interface MainViewControoler : UIViewController

@property (nonatomic) PopupViewController *popupView;

@end

米:

-(void)openButtonPressed
{
  if (!_popupView)
  {  
    _popupView = [[PopupViewController alloc] init];
    _popupView.delegate = self;
  }
  [self.view addSubview:_popupView.view];
  _popupView.view.frame = self.view.frame;
}

-(void)closePopup
{
  [_popupView.view removeFromSuperview];
}
于 2013-11-03T22:44:01.320 回答