ios添加一个对象作为子视图并重新发布会导致EXC_BAD_访问异常,为什么?
我有一个简单的应用程序,其中我以编程方式添加UIButton,如下所示ios添加一个对象作为子视图并重新发布会导致EXC_BAD_访问异常,为什么?,ios,xcode,debugging,memory-management,Ios,Xcode,Debugging,Memory Management,我有一个简单的应用程序,其中我以编程方式添加UIButton,如下所示 for(int i=0;i<[self.contentList count];i++) { UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [button addTarget:self action:@selector(buttonSelection:)forControlEven
for(int i=0;i<[self.contentList count];i++)
{
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(buttonSelection:)forControlEvents:UIControlEventTouchDown];
[button setTitle:[ [contentList objectAtIndex:i] valueForKey:@"nameKey"] forState:UIControlStateNormal];
button.tag=i+kButtonTagOffset;
[self.view insertSubview:button atIndex:0];
// [button release];
}
for (int row = 0; row < Portrait_TILE_ROWS; ++row)
{
for (int col = 0; col < Portrait_TILE_COLUMNS; ++col)
{
int index = (row * Portrait_TILE_COLUMNS) + col;
CGRect frame = CGRectMake(LandScape_TILE_MARGIN + col * (LandScape_TILE_MARGIN + LandScape_TILE_WIDTH),
LandScape_TILE_MARGIN + row * (LandScape_TILE_MARGIN + LandScape_TILE_HEIGHT),
LandScape_TILE_WIDTH, LandScape_TILE_HEIGHT);
UIButton *tmb= (UIButton *)[self.view viewWithTag:index+kButtonTagOffset];
if([tmb isKindOfClass:[UIButton class]]) //isKindOfClass
{
[ [self.view viewWithTag:index+kButtonTagOffset] setFrame:frame];
}
}
}
for(int i=0;i您需要重新阅读内存管理和cocoa命名约定的基础知识。您没有对其调用alloc、copy或retain…因此释放它是不正确的。该构造函数返回一个自动释放的对象。如果这个概念对您来说很困难,请切换到ARC
至于找出错误在哪一行->我肯定会再次阅读内存管理。如果它是一个自动释放的对象并添加到NSArray中,或者在我的情况下作为子视图,则该子视图不会保留它。谢谢你的建议。是的,它会保留,但你会释放它,这样它就会被释放->+1 alloc,+1由superview保留,-1您的发布呼叫,-1 autorelease later=0(解除分配,任何进一步的使用都会导致崩溃)明白了,我非常感谢您的耐心等待新的ios程序员。谢谢:)