Я новичок в разработке для iPhone и XCode в целом и не знаю, как начать устранение неисправностей сигнала EXC_BAD_ACCESS
. Как я могу заставить XCode прерываться в точной строке, которая вызывает ошибку?
Я не могу заставить XCode остановиться на линии, вызывающей проблему, но я вижу следующие строки в моей консоли отладки:
вс 25 октября 15:12:14 jasonsmacbook
TestProject [1289]:
CGContextSetStrokeColorWithColor:
неверный контекст
вс 25 октября 15:12:14 jasonsmacbook
TestProject [1289]:
CGContextSetLineWidth: недопустимый контекст
вс 25 октября 15:12:14 jasonsmacbook
TestProject [1289]:
CGContextAddPath: недопустимый контекст
вс 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;
}
Я удалил строку [array release]
, и она больше не дает мне сигнал EXC_BAD_ACCESS
, но теперь я не понимаю, почему это работает. Я подумал, что когда я использовал это свойство, оно автоматически сохранило его для меня, и поэтому я должен выпустить его из init
, чтобы у меня не было утечки. Я полностью сбит с толку о том, как это работает, и все руководства и вопросы Stackoverflow, которые я прочитал, только сбивают меня с толку больше о том, как устанавливать свойства внутри моего метода init. Кажется, нет единого мнения о том, какой путь является лучшим.