【问题标题】:objc_release EXC_BAD_ACCESSobjc_release EXC_BAD_ACCESS
【发布时间】:2012-09-14 18:18:50
【问题描述】:

无法确定此错误发生了什么。

我正在分多个段上传文件。

我已将我的 api 调用线程化到 7 个并发线程中。

这是它停止的汇编代码。

这是我打印的堆栈跟踪

最后是堆栈窗口

除了 dispatch_get_low() 的#define 之外,我没有任何 DISPATCH_QUEUE_PRIORITY_LOW,并且我没有调用 dispatch_get_low()

作为一点背景知识,我正在从 xcode 4.4 开发我的应用程序,并且最近安装了 GM Seed 4.5 以在 ios 6 上进行测试。我所有的代码仍然是 ios5 并且这个 bug 在 xcode 更新前后一直困扰着我。

更新

将 NSZombieEnabled YES 添加回我的环境变量后

我以几乎相同的方式出现了一个不同的错误,但是这个错误被称为 forwarding

汇编断点

堆栈跟踪打印输出

调用堆栈窗口

我仍然不知道实际发生了什么。

我还在调查。任何进一步的帮助将不胜感激。

==== 新发展 ====

显然是在尝试获取 malloc 调用的一些输出时。我完全缓解了这个错误。

这令人沮丧,因为我认为启用此标志后我无法编译发布。

EXC_BAD_ACCESS 不再出现,因此日志将无用。这个错误是我遇到过的最奇怪的问题,而且我遇到了很多奇怪的 iOS 错误。

再次更新

我一直在跟踪这个错误。原来有问题的对象是-[CFNumber release] 调用该号码是在一个块中创建的,然后被传递给委托人。

也可以结合Core Data对象保存然后消失。

我添加了一个方法 HSLogBrute(@"") 记录行号和文件名。

我已经追踪到下面的代码。

    if (progressMatch > progressPercent){
        HSLogBrute(@"");
        TransferStatus *transferStatus = [TransferStatus objectByID:task.transferStatusID];
        HSLogBrute(@"");
        transferStatus.segmentsTransferred = [NSNumber numberWithInt:segmentsTransferred.intValue];
        HSLogBrute(@"");
        transferStatus.segmentsTotal = [NSNumber numberWithInt:segmentsTotal.intValue];
        HSLogBrute(@""); // This is the last log I am getting.
        [transferStatus save];
        HSLogBrute(@"");
    }
    HSLogBrute(@"");// Before putting in the [NSNumber numberWithInt:] calls this was the last line.

【问题讨论】:

  • 你试过 NSZombies 了吗?
  • 我很久以前就放了。我会确保它仍然在应用程序中。
  • 查看此处了解如何正确启用它stackoverflow.com/questions/5386160/…
  • 确保您尝试执行的块是有效的。在尝试执行坏块时,我遇到了错误的访问内存问题。
  • 那么块应该被它们的封闭块保留和释放。我添加了BlockType block = [blockVar copy]; 以启用复制并让堆栈块消失。但我没有看到任何改善。

标签: ios5 core-data automatic-ref-counting grand-central-dispatch ios6


【解决方案1】:

原来我们正在创建一个 NSMutableDictionary 并在其中使用数字。像我们一样快地创建和销毁 NSNumbers 似乎在某些时候混淆了弧线。并且对象被无序地保留和释放。

我的解决方案是创建一个自定义对象,其中包含我需要的数字。并且增加和减少这些原始数字类型,而不是创建和销毁这么多 NSNumber 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 2018-01-13
    • 2012-07-24
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多