代码之家  ›  专栏  ›  技术社区  ›  Prashant Cholachagudda

为什么我会得到EXC_BAD_ACCESS?

  •  0
  • Prashant Cholachagudda  · 技术社区  · 14 年前

    我有下面的代码,它在按下按钮时执行。起初它按预期工作,但第二次应用程序挂起,我得到 EXC_BAD_访问 信号。

    - (IBAction) comicDetailsPressed:(id)sender {
       static IssueProperties *props = nil;
        if (props == nil) {
            props = [ComicDataParser 
             parseComicForUrl:@"http://dummy.com/Jan.xml"];
        }
    
        NSLog(@"%d", [props totalPages]);
    
        totalPages.text = [NSString stringWithFormat:@"%d", [props totalPages]]; 
    }
    
    3 回复  |  直到 10 年前
        1
  •  2
  •   Shaggy Frog    14 年前

    你没说是哪一行,这就意味着答案必须是推测性的。

    IssueProperties 对象,但当您分配给它时,不使用 retain . 你也许应该。

    这是假设返回值来自 parseComicForUrl: 发行性质 对象或子类。

    text 属性是 NSString copy 而不是 保持 . 如果不是,那应该是。

        2
  •  1
  •   user23743 user23743    14 年前

    +parseComicForUrl: . 另外,为什么不使用实例变量 props ?

        3
  •  1
  •   Andrew Shelansky    14 年前

    如果没有更多的上下文,就不可能确定答案,但我的第一个想法是:

    static IssueProperties *props 第二次也不会是零。相反,它的价值在于 [ComicDataParser parseComicForUrl] 返回。

    我猜是 ComicDataParser autorelease release d对象,无效。

    如果我是对的,你需要一个 retain 在某个地方。