Ну ответ прост, из документации:
Возвращаемое значение
Массив, содержащий объекты верхнего уровня в файле бобах. Массив не содержит ссылок на владельца файла или любые объекты-прокси; содержит только те объекты, которые были созданы при создании файла nib . Вы должны сохранить либо возвращенный массив, либо объекты, которые он содержит вручную, чтобы предотвратить удаление файлов файлов с досрочно.
Похоже, вы просто присваиваете возвращаемое значение arrayOfTableCellView
. Если вы хотите сохранить возвращаемое значение, а arrayOfTableCellView
на самом деле является свойством на вашем контроллере viewController, вам следует назначить его с помощью self.arrayOfTableCellView
.
Если вы не сохранили его, вам не нужно выпускать его, потому что вы его не обладаете. Так что, когда вы на самом деле получить массив как этот
NSArray *arrayOfTableCellView = [[NSBundle mainBundle] loadNibNamed:@"TableCellXyz" owner:self options:nil];
тогда вы не хотите иметь
[arrayOfTableCellView release];
в там, потому что вы не выделить объект.
EDIT:
Просто calarify тебе это, я просто побежал ваш код, с ожидаемым результатом:
NSArray * arrayOfTableCellView = [[NSBundle mainBundle] loadNibNamed:@"JLUViewController" owner:self options:nil];
UITableViewCell *cellOfXyz = (UITableViewCell*) [arrayOfTableCellView objectAtIndex:0];
[arrayCellHeights insertObject:[NSNumber numberWithInt:cellOfAlerts.frame.size.height] atIndex:kIndexXyz];
Приведенный выше код не врезаться или вызвать утечку. Инструменты не сообщают об утечке, поэтому с вами все будет в порядке.
Если добавить
[arrayOfTableCellView release];
хотя это будет крах, сообщая EXC_BAD_ACCESS, потому что вы пытались освободить объект, который вы не владеете. Обратите внимание, как я сделал NSArray локальной переменной? Вы должны сделать то же самое, потому что вам не нужно, чтобы он был свойством, поскольку вы просто используете его внутри области действия. Также не следует, чтобы, если arrayCellHeights
является свойством внутри вашего контроллера просмотра, всегда используйте self.arrayCellHeights
для доступа к нему.
Как примечание: вы не должны доверять keepCount. Вы не знаете, что происходит за кулисами. Какая ошибка вы получаете? Я предполагаю, что это EXC_BAD_ACCESS? –
BTW - ошибка выскочила из приложения. Во время моего Instrumentation, мой опыт заключается в том, что большинство из них оказываются непоследовательностью сохранения/выпуска памяти. В некоторых случаях зомби. – mobibob