Объекты в цели c имеют счет сохранения. Если этот счетчик хранения больше 0, когда объект выходит из области видимости (когда вы прекращаете его использовать), он протекает.
Следующие вещи увеличивают счет удержания
- [[alloc] init]
- новый
- копия
- [сохранить]
- добавление объекта в массив
- добавление объекта в качестве дочернего (например, просмотров)
- Вероятно, есть и другие, но вы, похоже, не используете другие в своем коде
Следующее уменьшение счетчика удержания
- [релиз]
- удаление объекта из массива
- если вы освободите массив, все его объекты будут освобождены
Вам следует пройтись по своему коду и убедиться, что каждое из сохранений или дополнений в массиве сопоставлено с соответствующим выпуском. (Вы можете освободить переменные-члены в методе dealloc).
РЕДАКТИРОВАТЬ: Джереми правильно указал, что мой ответ не
Как только вы добавляете объект в массив, он становится владельцем и освобождает объект, когда это будет сделано с ним. Все, что вам нужно сделать, это убедиться, что вы выпускаете все, что имеете, в соответствии с правилами управления памятью
Существуют также объекты автоматического выпуска, посмотрите на этот пример;
-(init){
...
stagePickerArray = [[NSMutableArray alloc] init];
for (int i = 0; i < 3; i++)
{
//this string is autoreleased, you don't have call release on it.
//methods with the format [CLASS CLASSwithsomething] tend to be autorelease
NSString *s = [NSString stringWithFormat:@"%d", i);
[stagePickerArray addObject:s];
}
...
}
Я думаю, единственное, чего вам не хватает, - это вызова метода release в вашем методе dealloc
-(void) dealloc
{
[stagepickerarray release]; //Do this for each of your arrays
[super dealloc];
}