Я новичок в разработке 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:]: сообщение, отправленное deallocated instance 0x3c4e610
Теперь я пытаюсь привлечь контекст, который я извлекаю из UIGraphicsGetCurrentContext()
, и перейти к объекту, который я хочу рисовать с помощью.
Дальнейшая пробная версия и отладка ошибок, и я обнаружил, что у NSMutableArray
у меня есть свойство для моего класса - зомби. Я вошел в функцию init
для класса, и вот код, который я использовал:
if ((self = [super init])) {
NSMutableArray *array = [NSMutableArray array];
self.terrainBlocks = array;
[array release];
}
return self;
}
Я удалил строку [array release]
и больше не дал мне сигнал EXC_BAD_ACCESS
, но теперь я смущен тем, почему это работает. Я думал, что когда я использовал свойство, он автоматически сохранил его для меня, и поэтому я должен освободить его изнутри init
, чтобы у меня не было утечки. Я полностью смущен тем, как это работает, и все направляющие и вопросы Stackoverflow, которые я прочитал, только путают меня больше о том, как установить свойства в моем методе init. Кажется, нет никакого консенсуса относительно того, какой путь является лучшим.