(viewConroller.view removeFromSuperview)线程:1 EXC_BAD_ACCESS(代码= 1,地址= 0x6000000008)

(^。^)嗨,抱歉我的英文不好。

嗨,我有下一个问题,我创build2个button第一个button创build一个视图控制器,并将他的视图添加到其他viewcontroller第二个button我释放视图控制器创build并从父视图中删除视图。 如果我点击更快的2个button崩溃的消息,如在post标题这是代码

(我现在这是因为内存问题,但是是什么问题?我这样做只是为了看到XCODE-PROFIL-INSTRUMENTS-Allocations的内存pipe理请帮助):

- (IBAction)create:(id)sender{ vc = nil; vc = [[[VC alloc] initWithNibName:@"VC" bundle:[NSBundle mainBundle]] retain]; [_VW addSubview:vc.view]; } 

并用此button杀死:

 - (IBAction)kill:(id)sender{ [vc.view removeFromSuperview]; [vc release]; } 

当你按下button的时候,至less在按下button的情况下,它会尝试release视图,但是很多时候你按下了button(假设代码只在你按下一次button时才起作用)。 EXC_BAD_ACCESS代码意味着您正试图访问已经释放的某个内存位置。

防止这种情况的最好方法是使用[NSButton setEnabled:(BOOL)enabled]方法。 当按下创buildbutton时,启用killbutton并禁用创buildbutton。 当按下killbutton时,禁用killbutton并启用创buildbutton。 这将防止意外的额外分配或释放。

另外,在你的创build方法中,你应该删除额外的retainvc的分配线。 alloc自动增加保留计数(到1),而额外的保留将它提高到2.按照这种方式,当按下button时,对象被释放一次,但保留计数仍然是1,创build内存泄漏。

看来, vc是一个iVar,所以你不应该发送kill:方法release 。 所以,只需删除代码行:

 [vc release]; 

并将其添加到您的dealloc方法。


请注意,最好使用下面的代码来create:

 if (vc == nil) vc = [[[VC alloc] initWithNibName:@"VC" bundle:[NSBundle mainBundle]] retain]; [_VW addSubview:vc.view]; 

否则,当你的vc不是零时,会导致内存泄漏。