0

在收到 exc_bad_access 错误后,我阅读了本教程: http: //www.ioslearner.com/debugging-exc_bad_access-error-xcode-instruments/并按照以下步骤操作:

  • 运行配置文件
  • 选择僵尸

除了我没有收到 Zomie 信号外,我的电脑上的一切看起来都一样。

为了确保我没有忘记某个步骤,我使用教程中提供的示例代码进行了尝试。在那里我看到了僵尸信号

那么如何使用 Xcode -> Profile 在我的项目中获取僵尸信号?

这是我使用的示例代码:

我很清楚这两个版本会导致错误。同样的问题是如何使用 Xcode 在配置文件中获取“僵尸消息”:

NSArray *currentRestaurant = [restaurants objectAtIndex:i];
RestauInfo *restauInfo = [NSEntityDescription
                         insertNewObjectForEntityForName:@"RestauInfo" 
                         inManagedObjectContext:context];
[restauInfo release];
restauInfo.Name = [currentRestaurant objectAtIndex:0];
restauInfo.Cuisine = [currentRestaurant objectAtIndex:1];
NSError *error;
if (![context save:&error]) {
    NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
[restauInfo release];// - this release would cause an EXC_BAD_ACCESS

另一个问题是:为什么我在第二个版本中得到 bad_access - 而不是在第一个版本之后访问 restauInfo 时?

4

2 回答 2

1

我发现了另一种检测内存管理故障的方法:

在 Xcode 中,您可以选择“运行”、“测试”、“配置文件”和“分析”
(按住左上角的运行按钮)

运行分析会发现内存管理错误——例如

  • 过度释放
  • 泄漏
于 2012-10-11T07:12:22.847 回答
0

您正在过度释放 restauInfo,它是一个自动释放的对象,您-release手动调用两次,导致崩溃。

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/CoreDataFramework/Classes/NSEntityDescription_Class/NSEntityDescription.html

于 2012-10-05T07:41:39.050 回答