由于uiview控制器的[super dealloc]引起的内存崩溃

时间:2009-10-30 11:56:47

标签: iphone objective-c ios crash

我有一个uiviewcontroller实例,当我发布它时,会调用它的dealloc方法。

我已经在uiviewcontroller的dealloc方法中发布了一些对象。

如果我发表评论[super dealloc]该应用程序正常运行,但如果不这样就会崩溃。

我认为我在该方法中所做的版本没有问题,但是如果我[super dealloc]它正在崩溃。

任何人都可以帮我解决这个问题吗?

3 个答案:

答案 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];
}

我希望这会有所帮助。