ios 添加一个对象作为 subview 并释放会给出 EXC_BAD_ACCESS 异常,为什么?

标签 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:)forControlEvents:UIControlEventTouchDown];
        [button setTitle:[ [contentList objectAtIndex:i] valueForKey:@"nameKey"]  forState:UIControlStateNormal];
        button.tag=i+kButtonTagOffset;
        [self.view insertSubview:button atIndex:0];
       // [button release];

    }

然后当 View 改变方向时访问它,如下调整其位置

  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];

            }

        }
    }

我的第一个问题是,如果我在添加到 subview 后释放 UIBUtton ,为什么我会收到 EXC_BAD_ACCESS 错误,并且它只发生在设备上而不是模拟器上。我认为添加到 subview 时,对象的保留计数会增加一并且稍后访问它不会引发该错误,有什么想法吗?

我如何在 xcode 调试器中找出 EXC_BAD_ACCESS 异常的对象和位置 提出了我通过简单地注释部分代码就弄清楚了!!!

谢谢 中号

最佳答案

您需要重新阅读内存管理和 cocoa 命名约定的基础知识。您没有对它调用 alloc、copy 或 keep...所以释放它是不正确的。该构造函数返回一个自动释放对象。如果这个概念对您来说很难,请切换到 ARC。

至于找出错误出现在哪一行 -> "Run > Stop on Objective-C exception" in Xcode 4?

关于ios 添加一个对象作为 subview 并释放会给出 EXC_BAD_ACCESS 异常,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11663323/

相关文章:

JavaScript:如何将消息打印到错误控制台?

ios - 在 UI 测试中填充 TextField 失败

ios - 如何从 Apple iTunes 搜索 API 按专辑 (collectionID) 返回所有歌曲

Xcode,默认窗口布局?

swift - 在 SwiftUI 中的 ActionSheet 上设置辅助功能标识符

debugging - 您发现并修复的最棘手的错误是什么?

ios - 检测拦截UIWebView中的视频播放

ios - 禁用 UISearchBar

ios - 我怎样才能停止在 Swift 中执行一个 Action ?

javascript - 在 IE6 中调试 JavaScript