У меня странные проблемы с NSArray
, когда некоторые члены объектов в моем массиве выходят за рамки, но не другие:
У меня есть простой объект под названием Section. В нем 3 члена.
@interface Section : NSObject {
NSNumber *section_Id;
NSNumber *routeId;
NSString *startLocationName;
}
@property(nonatomic,retain) NSNumber *section_Id;
@property(nonatomic,retain) NSNumber *routeId;
@property(nonatomic,retain) NSString *startLocationName;
@end
@implementation Section
@synthesize section_Id;
@synthesize routeId;
@synthesize startLocationName;
//Some static finder methods to get list of Sections from the db
+ (NSMutableArray *) findAllSections:{
- (void)dealloc {
[section_Id release];
[routeId release];
[startLocationName release];
[super dealloc];
}
@end
Я заполняю его из базы данных методом findAllSection
self.sections = [Section findAllSections];
В поиске всех разделов я создаю некоторые локальные переменные, заполняя их данными из БД.
NSNumber *secId = [NSNumber numberWithInt:id_section];
NSNumber *rteId = [NSNumber numberWithInt:id_route];
NSString *startName = @"";
Затем создайте новый раздел и сохраните данные этих локальных переменных в разделе.
Section *section = [[Section alloc] init];
section.section_Id = secId;
section.routeId = rteId;
section.startLocationName = startName;
Затем я добавляю раздел в массив
[sectionsArray addObject:section];
Затем очищаю, освобождая локальные переменные и секцию, которую я добавил в массив [secId release]; [свежий релиз]; [начало выпуска]; [locEnd_name выпуск];
[section release];
В цикле повторите для всех разделов (освободите локальные переменные, и раздел будет выполнен в каждом цикле)
Метод возвращается, и я проверяю массив и наличие всех разделов. Кажется, я не могу копать дальше, чтобы увидеть значения объектов Section в массиве (возможно ли это)
Позже я пытаюсь получить один из разделов
Я получаю это из массива
Section * section = [self.sections objectAtIndex:row];
Затем проверьте значение
NSLog(@" SECTION SELECTED:%@",section.section_Id);
Но вызов section.section_Id
потерпел крах, так как section.section_Id
выходит за рамки.
Я проверяю других членов этого объекта Section, и они в порядке. После некоторых проб и ошибок я обнаружил, что, закомментировав выпуск переменной-члена, объект в порядке.
//[secId release];
[rteId release];
[startName release];
[locEnd_name release];
[section release];
Мои вопросы:
Я хорошо убираюсь?
Должен ли я освободить объект, добавленный в массив, и локальную переменную в функции?
Мой Dealloc в порядке в Разделе?
Этот код выглядит нормально, и я должен искать проблему в другом месте?
Я не делаю ничего сложного, просто заполняю массив из БД, использую его в ячейке таблицы.
Я могу прокомментировать релиз, но предпочел бы знать, почему это работает, и не следует ли мне этого делать. Единственное место, где secId
высвобождается, — это Dealloc.