EXC_BAD_ACCESS
обычно происходит, когда вы пытаетесь получить доступ к члену, который уже был освобожден. Поскольку вы вызываете [NSMutableArray arrayWithCapacity:]
в своей функции инициализации, она может быть уже освобождена к моменту вызова logSequenceNumber:(id)sender
. Попробуйте добавить @property (nonatomic, retain) NSMutableArray* userNumSequence
к @interface
и @synthesize userNumSequence
к @implementation
. Затем вызовите self.userNumSequence = [NSMutableArray arrayWithCapacity:0]
в вашем методе init. Не забудьте установить значение nil
в dealloc.
РЕДАКТИРОВАТЬ: Кроме того, просто для ясности Управление памятью какао стандарты именования таковы:
- Если вы звоните
[[Object alloc] initSomehow]
или [object retain]
, вы отвечаете за его освобождение (вызов методов init
автоматически вызовет retain
).
- Если вы вызываете методы, такие как
[Object objectWithSomething:something]
, они обычно автоматически высвобождаются и будут выпущены в будущем. Вы никогда не должны предполагать, что они существуют за рамками их создания. Согласно документации Какао, область действия включает в себя стек вызовов. Если a:
вызывает b:
, что вызывает c:
, а c:
возвращает автоматически освобожденный объект, его можно безопасно передать обратно до использования a:
. Помимо этого это выпущено. Это, по крайней мере, моя интерпретация объяснения авто-выпуска.
Если вам нужно что-то использовать на протяжении жизни вашего объекта, сохраните его, когда получите, и отпустите в dealloc
.