我的单身人士和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调用两次......我做错了什么???
答案 0 :(得分:1)
您的卸载功能应仅包括:
- (void)unload {
self.viewController = nil;
}
当你将retain属性设置为nil时,它会释放实例变量AND nils它。你只是在这里留下一个悬垂的指针。
答案 1 :(得分:0)
发布后需要将其设置为nil
:
[_viewController release];
_viewController = nil;
否则,下一个出现的人会尝试用无效的指针做事。