UIViewController不调用dealloc或调用它两次

时间:2012-08-02 00:53:14

标签: iphone objective-c ios uiviewcontroller dealloc

我的单身人士和UIViewController存在一些问题;

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通过pushViewController:animated:使用应用程序的不同部分。但有时我需要通过调用Singleton类的方法viewController来释放- (void)unload!如果pushViewController:animated:从不调用viewController,一切都很好并且dealloc正在调用,但是如果pushViewController(和viewController执行viewDidLoad),则dealloc不起作用。如果我做了self.viewController = nil; dealloc调用两次......我做错了什么???

2 个答案:

答案 0 :(得分:1)

您的卸载功能应仅包括:

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

当你将retain属性设置为nil时,它会释放实例变量AND nils它。你只是在这里留下一个悬垂的指针。

答案 1 :(得分:0)

发布后需要将其设置为nil

[_viewController release];
_viewController = nil;

否则,下一个出现的人会尝试用无效的指针做事。