2012-08-02 52 views
0

我有我的单身人士和UIViewController那里的一些问题;通过经由pushViewController:animated:应用程序的不同部分使用UIViewController不调用dealloc或调用两次

Singleton.h

@property (nonatomic, retain) UIViewController *viewController; 

Singleton.m

... 

@synthesize viewController = _viewController; 

- (void)load { 
    self.viewController = [[[UIViewController alloc] initWithNibName:@"NibName" bundle: nil] autorelease]; 
} 

- (void)unload { 
    [_viewController release]; 
} 

viewController。但有时我需要通过调用Singleton类的方法- (void)unload来发布viewController!如果pushViewController:animated:从来没有要求viewController一切都很好,dealloc正在调用,但如果pushViewController(和viewController执行viewDidLoad),dealloc不起作用。如果我做一些像self.viewController = nil; dealloc调用两次...我做错了什么?

+0

结构 - RootViewController的 --UINavigationController ---- UIViewController中 ------'viewController' - 'pushViewController:动画:' 我试图释放RootViewController的 - 所有的意见都只发布'viewController'有问题。释放rootViewController之前,我打电话 - (无效)卸载 – 2012-08-02 01:33:43

回答

0

你需要释放它后,将其设置为nil

[_viewController release]; 
_viewController = nil; 

否则旁边的人谁走来会尽量做的东西有一个无效的指针。

1

你卸载功能只包括:

- (void)unload { 
    self.viewController = nil; 
} 

当您设置一个保留的财产为零,它释放实例变量和尼尔斯它。你只是在这里留下你的财产悬挂指针。所有的viewController 的UITabBarController的

+0

它没有奏效。只有当我使用[_viewController发布];和self.viewController = nil; dealloc正在调用,但两次。也许这有助于:_viewController有正在播放的MPMoviePlayerController ... – 2012-08-02 01:11:39

+0

@RostK。你有一个额外的保留,因为该代码将释放它两次。使用工具来跟踪保留和释放此变量。 – borrrden 2012-08-02 02:57:11