我是相當新的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