【问题标题】:EXC_BAD_ACCESS in objective c目标 c 中的 EXC_BAD_ACCESS
【发布时间】:2012-04-07 17:59:32
【问题描述】:

有人可以帮我写下面的代码吗?在这个循环中随机获取 EXC_BAD_ACCESS。我猜 [NSString stringWithFormat:....] 有问题,但不明白为什么,也不知道如何解决。非常感谢。

for(int i=0;i<row;i++)
     {
    for(int j=0;j<col;j++)
    {

        CGRect tileFrame=CGRectMake(i*tileSize, j*tileSize, tileSize, tileSize  );
        UILabel * t=[[UILabel alloc]initWithFrame:tileFrame];


        t.text=[NSString stringWithFormat:@"%i",j*row+i];




         ///If there is a crashing ,it always stop at here, right after the [NSString stringWithFormat:.....]
         t.backgroundColor=[UIColor clearColor];




        //NSString * temps=[NSString stringWithFormat:@"%i",j*row+i ];
        //t.text=temps;

       [myView addSubview:t];

       [t release];

    }
}

顺便说一句,我在网上阅读了一些帖子,有人告诉我按照以下方式进行操作可以解决问题。我不确定这一点,当这个对象仍在其范围内时,为什么需要保留一个自动释放对象。更重要的是我不应该在某处释放保留对象吗?否则会导致内存泄漏。

替换

 t.text=[NSString stringWithFormat:@"%i",j*row+i];

与:

 NSString * temps=[NSString stringWithFormat:@"%i",j*row+i ];
[temps retain];
 t.text=temps;      

【问题讨论】:

  • 到底是哪里崩溃了?没有崩溃日志,任何人都很难说出答案。
  • 那个疯狂的双 for 循环可能与它有关。
  • 这种“疯狂”的双重 for 循环被用于数以万计的应用程序中。如果你做一些涉及列和行的事情,这实际上是非常标准的。 m)
  • 我很确定您的应用不会因为这段代码而崩溃。
  • 正如@MatthiasBauch 所说,这不是您崩溃的根源。

标签: objective-c cocoa-touch nsstring autorelease stringwithformat


【解决方案1】:

此错误是因为您使用的是之前发布的对象。尝试设置这些设置: 它们在项目 >> 编辑方案 >> 参数中

然后将控制台输出放在这里。

【讨论】:

  • 你能解释一下吗?如果设置这些设置有什么区别。我的意思是 NSZombieEnabled 为 YES 和 MallocStackLoggingNoCompact 为 1。
  • 如果你在 Xcode 4 中,Zombies 复选框在方案设置中——从方案弹出窗口中单击“编辑方案”(单击左侧..),选择工作表左侧的“运行”行,然后是“诊断”标题,然后单击“启用僵尸对象”复选框和“日志记录”下的“Malloc 堆栈”。这是我(永远以前!)关于你下一步做什么的维基页面:cocoadev.com/index.pl?DebuggingAutorelease
  • 我想发布类似的链接,但我发现只有俄语页面
【解决方案2】:

我已经在我的设备中对其进行了测试,它没有崩溃。

我在 self.view 中添加了 't',我认为 myView 可能有问题

【讨论】:

  • 就像我所说的,这种崩溃是随机发生的。该应用程序总是在 [NSString stringWithFormat: ] 之后完全停止。我真的无法弄清楚这段代码有什么问题。它非常简单和标准。我的代码可能还有其他问题。我将再阅读一次内存管理文章以考虑这一点并再次检查我的代码。感谢您的所有 cmets。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-14
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多