我有一个uiviewcontroller
实例,当我发布它时,会调用它的dealloc方法。
我已经在uiviewcontroller
的dealloc方法中发布了一些对象。
如果我发表评论[super dealloc]
该应用程序正常运行,但如果不这样就会崩溃。
我认为我在该方法中所做的版本没有问题,但是如果我[super dealloc]
它正在崩溃。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:4)
很难从你的帖子中得知没有更多信息,但你的dealloc方法看起来像这样吗?
- (void)dealloc {
[super dealloc];
self.someProperty = nil;
}
因为如果确实如此,那么您将在释放的实例上调用setter方法。你应该总是最后调用[super dealloc]:
- (void)dealloc {
self.someProperty = nil;
[super dealloc];
}
不确定这是否有帮助。如果没有,请尝试发布dealloc方法的样子。很难在黑暗中排除故障。
答案 1 :(得分:1)
如果没有更多信息,我们无法为您提供帮助。你描述的代码非常好。问题出在您应用的其他部分。
您可能在发布后访问视图控制器,因此问题不在于[super dealloc]
,而是您应用程序中访问视图控制器的任何其他位置。
答案 2 :(得分:0)
也许您正在将控制器放在错误的位置。这可能就是你的ViewController.m中的[super dealloc]崩溃的原因
在您希望控制器死亡之前,不应该调用[viewController release]。例如,如果您的应用程序只有一个viewcontroller,则在应用程序结束之前不得释放它。这是因为控制器需要始终保持活动以控制视图。如果你的ApplicationDelegate有这样的东西,它会崩溃:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
UIViewController *controller = [[UIViewController alloc] init];
[window addSubview:controller.view];
[controller release]; //this will crash
}
而不是你应该将你的viewcontroller放在头文件(.h)中并在dealloc方法中释放它:
- (void)dealloc {
[controller release];
[window release];
[super dealloc];
}
我希望这会有所帮助。