应用程序在super dealloc方法中崩溃

时间:2013-05-17 06:49:37

标签: iphone ios xcode crash-reports

我的应用程序崩溃在[super dealloc];行和- (void)dealloc方法中我将释放保留在.h类中的所有对象,崩溃报告是

-[__NSArrayI respondsToSelector:]: message sent to deallocated instance 0x86fb1a0
-[__NSArrayI respondsToSelector:]: message sent to deallocated instance 0x86fb1a0
-[__NSArrayI respondsToSelector:]: message sent to deallocated instance 0x86fb970
-[UIButton release]: message sent to deallocated instance 0x9b914b0

但阻止[super dealloc];此行代码完成后会发生什么,但它会给我警告Method possibly missing [super dealloc] call。如果有人知道我在做错的地方帮助我。提前谢谢。

被修改

 [_gf_Knowledge_ratingStars release];
[_gf_Range_ratingStars release];
[_quality_ratingStars release];
[_atmosphere_ratingStars release];
[_reviewtxt release];
[_whatsGoodHere release];
[_saveButton release];
[_screen_title release];
[_commentImageView release];
[_resturantBGImageView release];
[_textViewPlaceholder release];
[_gFKnowledgeUnselectBtn release];
[_gFRangeUnselectBtn release];
[_gualityUnselectBtn release];
[_atmosphereUnselectBtn release];
[_gFKnowledgeLbl release];
[_gFRangeLbl release];
[_gualityLbl release];
[_atmosphereLbl release];
[_navbarImageView release];
[_btnBack release];
[super dealloc];

7 个答案:

答案 0 :(得分:3)

我认为您使用NSArray静态方法将内存分配给arrayWithArray

通过这种方式,它会被添加到自动发布池中,保留计数将为0.保留它或用alloc

手动[[NSArray alloc] init]

答案 1 :(得分:2)

如果您释放两次对象,可能会发生这种情况。请检查所有版本并删除任何重复。

答案 2 :(得分:1)

请确保此行([super dealloc];)是dealloc方法中的最后一个语句 我认为你在[super dealloc]

之后已经为其他类变量发了书

答案 3 :(得分:0)

问题是您正在发布作为NIB的一部分加载的UI对象。

黄金法则:不要发布您自己未分配的任何内容。

答案 4 :(得分:0)

我认为问题是您创建的按钮之一

UIButton* btn = [UIButton buttonWithType:UIButtonTypeCustom];

然后你以dealloc方法发布。尝试评论上面声明的所有按钮。

答案 5 :(得分:0)

首先在你的应用程序中启用僵尸

怎么做?请仔细阅读。

How to enable NSZombie in Xcode?

现在当您的应用程序崩溃时,您将知道您的应用程序崩溃了哪一行。检查有问题的对象有什么标识符。 (保留或分配),在您为其指定了自动释放对象的行的某个点检查,检查您是否使用了合成设置器和getter来分配这些值或将它们直接分配给属性。如果你已经合成了一个属性,你应该总是使用(。)点运算符来设置和获取值。

至于您已连接的网点。请检查他们有什么标识符。 (保留或转让)。

答案 6 :(得分:0)

你已经两次发布任何变量,我认为你在[super dealloc]之后已经为其他类变量发了书面版本。