我是iPhone开发和XCode的新手,并不知道如何开始对EXC_BAD_ACCESS信号进行故障排除.如何让XCode在导致错误的确切行中断?
我似乎无法让XCode停在线路上导致问题,但我确实在调试控制台中看到以下几行:
Sun Oct 25 15:12:14 jasonsmacbook TestProject [1289]:CGContextSetStrokeColorWithColor:无效的上下文
Sun Oct 25 15:12:14 jasonsmacbook TestProject [1289]:CGContextSetLineWidth:无效的上下文
Sun Oct 25 15:12:14 jasonsmacbook TestProject [1289]:CGContextAddPath:无效的上下文
Sun Oct 25 15:12:14 jasonsmacbook TestProject [1289]:CGContextDrawPath:无效的上下文
2009-10-25 15:12:14.680 LanderTest [1289:207]*** - [CFArray objectAtIndex:]:消息发送到释放的实例0x3c4e610
现在,我试图绘制到我检索的上下文UIGraphicsGetCurrentContext()并传递给我想要绘制的对象.
进一步的试验和错误调试,我发现NSMutableArray我的班上有一个属性是一个僵尸.我进入了init该类的函数,这是我使用的代码:
if ((self = [super init])) {
NSMutableArray *array = [NSMutableArray array];
self.terrainBlocks = array;
[array release];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
我删除了[array release]线,它不再给我EXC_BAD_ACCESS信号,但我现在很困惑为什么这个工作.我认为当我使用该属性时,它会自动为我保留它,因此我应该从内部释放它init以便我没有泄漏.我完全混淆了它是如何工作的,我读过的所有指南和Stackoverflow问题只会让我更加困惑如何在我的init方法中设置属性.关于哪种方式最好,似乎没有达成共识.