Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone:在parentViewController上调用dealloc会导致异常_Iphone_Dealloc_Parentviewcontroller - Fatal编程技术网

iPhone:在parentViewController上调用dealloc会导致异常

iPhone:在parentViewController上调用dealloc会导致异常,iphone,dealloc,parentviewcontroller,Iphone,Dealloc,Parentviewcontroller,我正在处理viewDidUnload和dealloc方法,在调用[super dealloc]时发现了一个问题;在父视图控制器中 我有很多带有自定义代码的视图控制器,我把它们放在父视图控制器的外部。因此,在定义视图控制器时,我设置了对超类的引用: @interface LoginViewController : AbstractViewController 然后,在dealloc方法中,我调用AbstractViewController dealloc方法: //(Login View Con

我正在处理viewDidUnload和dealloc方法,在调用[super dealloc]时发现了一个问题;在父视图控制器中

我有很多带有自定义代码的视图控制器,我把它们放在父视图控制器的外部。因此,在定义视图控制器时,我设置了对超类的引用:

@interface LoginViewController : AbstractViewController
然后,在dealloc方法中,我调用AbstractViewController dealloc方法:

//(Login View Controller code)
- (void)dealloc {
    [user release];
    [passwd release];
    [super dealloc];
}
[super dealoc]执行以下代码:

//(Abstract View Controller code)
- (void)dealloc {
    [dbUtils release];
    [loadingView release];
    [super dealloc];
}
如果我在iPhone模拟器上模拟内存警告,将引发以下异常:

2010-03-03 11:27:45.805 MyApp[71563:40b] Received simulated memory warning.
2010-03-03 11:27:45.808 MyApp[71563:40b] *** -[LoginViewController isViewLoaded]:     message sent to deallocated instance 0x13b51b0
kill
quit
但是,如果我在AbstractViewController中注释[super dealoc]行,则不会引发异常,并且我的应用程序仍在运行


再次感谢您的帮助

看起来您正在释放视图控制器,但又试图再次使用它。由于内存警告而释放视图控制器时,请记住将指针设置为nil,以免再次意外使用它。i、 例如

[myLoginViewController release]; //!< Triggers the dealloc call
myLoginController = nil; //!< Makes sure we never use it again
希望有帮助


Sam

注意-didReceiveMemoryWarning不会触发-dealloc,它会触发-viewDidUnload。因此,我猜是您的-viewDidUnload实现出错,导致控制器的最终保留被释放,所以称为-dealloc。我刚刚在代码中遇到了这个问题,它是由-viewDidUnload中发布的retain循环引起的。

这件事发生在我身上,我花了一段时间才弄清楚。其中一名代表试图发送一条消息,因为该代表是自我,并且是一个强引用。当我使它变弱时,它似乎已经修复了它。

是另一个viewController,它在AbstractViewController initWithNib中初始化。。。with self.loadingView=[[UIViewController alloc]initWithNibName:@“LoadingViewController”捆绑包:nil];
self.myLoginViewController = nil;