我是相当新的Objective-C和我不知道如何正确处理内存管理在以下情形:Objective-C的吸气内存管理
我有一个核心数据实体与一对多的关系为关键的“孩子”。为了访问孩子作为一个数组,按列“位置”排序,我写的模型类是这样的:
@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方法是否已经返回一个保留的数组?这可能太晚了,我喝了一杯咖啡过量。
如果有人能指出我正确的方向,我会非常感激。我想我错过了记忆管理知识的重要部分,我一定会仔细研究它。
我刚刚通过链接查看了内存管理的对象所有权和处置章节,我想我现在明白了。我想我需要再次阅读整个指南,因为我确信我第一次错过了。 非常有用的答案!谢谢! – 2010-05-16 21:46:01
鉴于你从来没有读过伊娃,看起来毫无意义。使该属性为只读方法,并在该方法中使用本地变量'arrangedChildren'。然后,如乔治所说,不要保留/释放未经安排的儿童,也不要保留已安排的儿童。你也可以失去'@synthesize ...'。 – JeremyP 2010-05-17 09:39:42