내가 목표 - C로 비교적 새로운 해요 올바르게 다음 시나리오에서 메모리 관리를 처리하는 방법을 확실하지 않다 : 나는 일대 다 관계가있는 코어 데이터 엔터티를는 목표 - 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을 (최초의 유지 여부를 확실하지 않다 : 열 "위치"으로 분류되어 배열로 아이들에 액세스하려면, 나는 모델 클래스 이런 식으로 썼다 및 arrangedChildren getter의 마지막 행). NSSet allObjects 메서드가 이미 보유 배열을 반환합니까? 아마 너무 늦었고 커피가 과다 복용했습니다.
누군가가 올바른 방향으로 나를 가리킬 수 있다면 정말 감사 할 것입니다. 나는 메모리 관리 지식의 중요한 부분을 놓치고 있다고 생각한다. 나는 그것을 철저히 조사 할 것이다.
방금 메모리 관리의 개체 소유권 및 폐기 장에 대한 링크를 읽었으며 지금은 이해하고 있다고 생각합니다. 나는 내가 처음으로 많이 그리워 했으므로 전체 가이드를 다시 읽을 필요가 있다고 생각한다. 매우 유용한 답변입니다. 감사! –
당신이 ivar을 읽지 않는다는 것을 감안할 때, 전혀 가지고 있지 않은 것 같습니다. 속성을 읽기 전용으로 만들고 변수'arrangedChildren'을 메소드에 로컬로 만듭니다. 그런 다음 Georg이 말했듯이 unarrangedChildren을 유지/해제하거나 arranchedChildren을 유지하지 마십시오. 그리고 여러분은'@synthesize ... '도 잃을 수 있습니다. – JeremyP