Я бы сказал, что вы должны быть очень обеспокоены. Первое правило программирования заключается в том, что пользователь никогда не будет делать то, что вы ожидаете.
Что нужно учитывать:
- Методы доступа. Используй их. Настроить
свойства для всех атрибутов и
всегда получать к ним доступ с
соответствующие методы получения / установки:
.
object.property = some_other_object; -OR-
[object setProperty:some_other_object];
и
object = some_other_object.some_property;
object = [some_other_object some_property];
Не поддавайтесь искушению делать такие вещи, как:
property = some_other_object;
[property retain];
- Получаете ли вы выходные данные из ObjectAlloc?
Есть 4 инструмента от утечек памяти,
производительность и распределение объектов.
Никто из них не загружается?
- Что вы получаете, когда приложение падает?
EXEC_BAD_ACCESS или какая-то другая ошибка?
- Сбалансированное удержание (выделение или
копировать) и выпустить. Это хорошая идея
чтобы сохранить все выделения / копии сбалансированными
с выпуском / авто-выпуском в
тот же метод. Если вы используете свой
аксессоры ВСЕ ВРЕМЯ, необходимость
делать ручные выпуски редко.
- Авто-релиз часто будет скрывать настоящий
проблема. Это возможно Авто-релиз
может маскировать некоторые хитрые выделения
проблемы. Дважды проверьте ваше использование
autorelease.
ИЗМЕНЕНО (добавлено в зависимости от вашего кода ошибки)
На основании вашего вышеуказанного ответа "Программа получила сигнал: 0". Это указывает на то, что вам не хватает памяти. Я бы начал с поиска случаев, когда ваш код выполняет что-то вроде:
myObject = [[MyClass alloc] init];
[someMutableArray addObject:myObject];
и у вас нет «релиза», когда вы помещаете новый объект в массив. Если этот массив будет освобожден, объект myObject станет сиротой, но все равно останется в памяти. Самый простой способ сделать это - выполнить все ваши сообщения "alloc" / "copy". За исключением крайне редких условий, в той же функции должен быть парный «выпуск» / «авторелиз» Чаще всего выше должно быть:
myObject = [[[MyClass alloc] init] autorelease];
[someMutableArray addObject:myObject];