2010-06-07 5 views
1

일시적인 속성은 핵심 데이터 측면에서 "관리 속성"입니까? 핵심 데이터가 메모리를 관리합니까? 또는 수동으로 -dealloc에서 수동으로 릴리스해야합니까?-dealloc에 ​​일시적인 속성을 릴리스해야합니까?

(내가 하위 클래스를 만들지 않기로 결정했기 때문에 아니 겠지만, 파생 값을 계산하기 위해 서브 클래스가 필요하기 때문에 일시적인 속성이있을 때 이해가되지 않는다고 생각합니다. ??)

답변

2

코어 데이터의 메모리 관리는 약간 까다 롭습니다.

임시 속성에 특별한 작업을 수행하지 않으면 대부분 합성 된 접근자가 속성의 개체 수명주기를 관리합니다. (Xcode가 데이터 모델에서 관리 객체 클래스의 소스를 생성 할 때 속성 객체의 최종 릴리스를 만들지 않아도됩니다. 항상 필요하다면 그렇게 될 것입니다.) 불행히도, 일시적인 속성이므로 프로세스에서 생성 된 객체 또는 기타 객체를 릴리스해야합니다.

그러나 dealloc에서는 해제하지 않습니다. Apple 문서에서는 절대 NSManagedObject 하위 클래스의 init 또는 dealloc 중 하나를 수정하지 말 것을 강력히 권장합니다. 대신 일시적인 속성을 해제하려면 didTurnIntoFault에 릴리스해야합니다. 그 이유는 핵심 데이터가 개체를 오류로 변환 할 때 개체가 여전히 메모리에 있고 살아 있는지에 상관없이 모든 특성을 제거하기 때문입니다.

코어 데이터가 너무 많이 뒤 따르기 때문에 최종 릴리스를 보내기 전에 일시적 속성의 개체가 0이 아닌지 확인하는 것이 매우 중요합니다.

+0

그래서 -didTurnIntoFault에서 일시적인 속성을 릴리스하더라도 if (transientProperty! = nil) {[transientProperty release]}와 (과) 같이 확인해야합니다. 하지만 : 보내고 싶지 않다고해도 문제가되지 않습니다. – dontWatchMyProfile

+0

이론상으로, 실제로, 코어 데이터에서 이상 없음을 확인하면 무효 확인이 피해야하는 것처럼 보였습니다. 아마 그것을 무시할 수 있습니다. 내 벨트와 멜빵 태도의 그것의 더 많은 것. – TechZen

2

일시적인 속성을 지원하기 위해 관리되는 개체가 언제든지 특별한 것을 할당하면 dealloc에서 해제해야합니다. 기본적으로 사용자가 생성 한 모든 것을 릴리스하십시오.

+1

여기에 중대한 오류가 있습니다. 관리 객체를 사용하면 dealloc에서 해제하지 않고 대신 'didTurnIntoFault'를 해제합니다. – TechZen

관련 문제