2011-01-11 2 views
-1

메모리 관리 측면에서 올바른 코드입니까?목표 C - 코어 데이터를 사용하여 릴리스

NSEntityDescription *description = [NSEntityDescription 
             entityForName:@"Event" inManagedObjectContext:managedObjectContext]; 
NSFetchRequest *eventRequest = [[[NSFetchRequest alloc] init] autorelease]; 
[eventRequest setEntity:description]; 
[description release]; 

NSPredicate *eventPredicate = [NSPredicate predicateWithFormat: 
             @"(event == %@)", [item objectForKey:@"event"]]; 
[eventRequest setPredicate:eventPredicate]; 

아니면 설명과 eventPredicate를 릴리스해야합니까?

감사합니다.

답변

1

해당 코드를 보면 소유하고있는 유일한 객체는 eventRequest입니다. 자동 릴리스되므로 다시 릴리스 할 필요가 없습니다.

이름 지정 규칙에 따라 다른 모든 개체는 소유되지 않으므로이를 해제 할 필요가 없습니다.

라인 [description release];은 라인 어딘가에서 충돌을 일으킬 수 있습니다.

+0

다음 주석을 읽는 것이 옳다는 것을 말합니다. 그래서 대답이 무엇인지 모르겠습니다 ... – xger86x

+0

'description'은 "alloc"이라는 단어가있는 메소드에서 사용자에게 주어지지 않았기 때문에 release가 아니어야합니다. 복사 ","보유 "또는"신규 "를 의미합니다. 코코아의 명명 규칙에 따라 이름에 해당 단어가 포함되지 않은 메서드는 객체에 대한 소유 참조를 반환하지 않아야합니다 (+1 유지). 이 문맥에서 당신이 염려하는 한 당신의 객체는 0의 보유 수를 가지며 당신은 그것을 놓아서는 안된다. – Jasarien

+0

정답은 무엇인지 모르기 때문에이 질문을 확인해주십시오. 감사합니다 http://stackoverflow.com/questions/4659020/iphone-where-allocate-memory-for-datasource – xger86x

-1

해당 코드에 대한 출시가 필요하지 않습니다. 이유를 확인하려면 Apple's documentation을 읽어야합니다.

+0

답을 명확히 한 후에 투표를 취소했습니다. – Jasarien

관련 문제