2009-11-14 2 views
8

나는 과도 특성의 정확한 정의에 대해 확실하지 오전 :CoreData의 일시적인 속성을 언제 개체 모델에 포함해야합니까?

  1. 하나는 개체 모델의 일시적인 속성을 정의하고 관련 클래스 필요할 때를 계산할 수 있습니다.
  2. 그러나 클래스를 지정하고 개체 모델에서 선언하지 않고 임의의 일시적인 속성에 대해 임의의 getter 메서드를 정의하면 (모델의 해당 클래스에 엔터티가 연결되어있는 한) 모든 작업이 올바르게 작동합니다.

내 질문 : 개체 모델에서 일시적인 속성을 선언 할 때의 이점은 무엇입니까? 나는 아래쪽 만 볼 수 있습니다. 일시적인 속성 (예 : "FormattedDate")을 추가 할 때마다 persistentStore가 호환되지 않습니다.

무엇이 누락 되었습니까? Core Data Programming Guide에서

답변

6

:

비 지원 속성이 객체 인 경우는, 다음 관리되는 개체 모델에서 당신은 정의로 유형을 지정하고, 그것은 일시적이다. 엔터티의 사용자 지정 클래스를 구현할 때 특성에 대한 인스턴스 변수를 추가 할 필요가 없습니다. 관리되는 개체의 개인 내부 저장소를 사용할 수 있습니다. 아래 설명 된 구현에 대해주의 할 점은 일시적 값을 캐시한다는 점입니다. 이렇게하면 값에보다 효율적으로 액세스 할 수 있으며 변경 관리에도 필요합니다. 사용자 정의 인스턴스 변수를 정의하는 경우 dealloc 또는 finalize 대신 doTurnIntoFault에서 이러한 변수를 정리해야합니다.

나는 이것을 "편의성"과 "모든 속성을 한 곳에서 정의 된 관리 대상 객체 모델 유지"라는 의미로 사용합니다. MOM 버전에 관해서는

Core Data Model Versioning and Data Migration Programming Guide는 말한다 : 버전에

코어 데이터의 관점은 지속성에 영향을 미치는 모델의 기능에만 관심이 있다는 것입니다.

그러나 일시적인 속성에 대한 위치는 분명하지 않습니다. 사실이 단락을 자세히 설명하는 두 번째 글 머리 기호는 모순처럼 들립니다. 빠른 테스트 ("name"속성을 가진 간단한 "Foo"엔티티가있는 새 프로젝트, 여러 개의 파일이있는 파일 저장, 일시적인 속성 추가, 다시 실행 및 모든로드, 새 foo 추가, 저장, 닫기, 다시 열기)는 사실 과도 특성을 버전 관리 시스템에서 고려하지 않음을 보여줍니다.

+1

설명해 주셔서 감사합니다. 나는 이것을 다시 시험했다. 분명히 틀렸어. 모델에 일시적인 속성을 추가해도 호환되지 않는 상점이 생기는 것은 아닙니다. 효율성에 대한 논의가있는 것 같습니다. 그러나 캐싱이 어떻게 작동하는지 이해하지 못했습니다. 예를 들어 CLLocationCoordinate2D 속성이 있고 getter 메서드가 두 배의 위도/경도로 간단하게 만듭니다. 코어 데이터가 결과 값을 어떻게 캐시합니까? – FelixLam

+0

확실하지는 않지만 테스트 할 가치가 있습니다 : "일시적인 값을 가져 오거나 설정하는 두 가지 전략이 있습니다."느리게 "... 또는 awakeFromFetch 중에 일시적 값을 검색 할 수 있습니다. 값이 클 경우 느슨하게 검색합니다 ... 영구 값의 경우 일시적인 값이 변경 될 때마다 업데이트하거나 (..., 객체를 저장할 때까지 업데이트를 연기 할 수 있습니다 ... "(적합하게 다듬어 진) –

관련 문제