Я довольно новыми для Objective-C, и я не знаю, как правильно справиться с управлением памятью в следующем сценарии:Objective-C Getter Управление памятью
У меня есть Core Data Entity с отношения ко многим для ключевых «детей». Для того, чтобы получить доступ к детям как массив, отсортированный по «позиции» колонке, я написал класса модели таким образом:
@interface AbstractItem : NSManagedObject
{
NSArray * arrangedChildren;
}
@property (nonatomic, retain) NSSet * children;
@property (nonatomic, retain) NSNumber * position;
@property (nonatomic, retain) NSArray * arrangedChildren;
@end
@implementation AbstractItem
@dynamic children;
@dynamic position;
@synthesize arrangedChildren;
- (NSArray*)arrangedChildren
{
NSArray* unarrangedChildren = [[self.children allObjects] retain];
NSSortDescriptor* sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"position" ascending:YES];
[arrangedChildren release];
arrangedChildren = [unarrangedChildren sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[sortDescriptor release];
[unarrangedChildren release];
return [arrangedChildren retain];
}
@end
я не уверен, следует ли сохранить unarrangedChildren и возвращенные arrangedChildren (первый и последняя строка убранного детского геттера). Метод NSSet allObjects уже возвращает сохраненный массив? Возможно, слишком поздно, и у меня передозировка кофе.
Я был бы очень благодарен, если бы кто-то мог указать мне в правильном направлении. Наверное, я пропустил важные части знаний по управлению памятью, и я обязательно буду внимательно изучать их.
Я только что прочитал вашу ссылку на раздел «Управление владением и удалением объектов» управления памятью, и я думаю, что сейчас понимаю. Думаю, мне нужно снова прочитать весь путеводитель, поскольку я уверен, что я пропустил это в первый раз. Очень полезный ответ! Благодаря! –
Учитывая, что вы никогда не читали ивара, кажется бессмысленным иметь его вообще. Сделайте свойство readonly, а переменная 'builtChildren' - локальной для метода. Затем, как говорит Георг, не сохраняйте/освобождать неубранных детей и не устраивайте организованных детей. И вы можете потерять '@synthesize ...' тоже. – JeremyP