我的应用程序崩溃在[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];
答案 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]之后已经为其他类变量发了书面版本。