ios添加一个对象作为子视图并重新发布会导致EXC_BAD_访问异常,为什么?

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

我有一个简单的应用程序,其中我以编程方式添加UIButton,如下所示

    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程序员。谢谢:)