티스토리 뷰
Key-Value Coding Programming Guide - Adopting Key-Value Coding - Compliance Checklist
rhinoPHS 2019. 2. 3. 17:51Key-Value Coding Programming Guide - Adopting Key-Value Coding - Compliance Checklist
객체가 KVC를 사용하기 위해서는 아래 내용을 체크하세요
Attribute and To-one Relationship Compliance
✅ attribute나 일대다 관계의 프로퍼티에 대해
<key>나 is<Key>메소드를 구현하거나 <key> 나 _<key> 인스턴스를 만드세요. 프로퍼티를 자동생성으로 만들면(@property, @synthesize) 자동으로 컴파일러가 알아서 해줍니다.
!Note
프로퍼티 네임은 보통 소문자로 시작하지만, 프로토콜의 기본구현은 대문자로 시작해도 동작합니다. (URL 같은)
✅ 프로퍼티가 변경가능 하면 set<Key> 메소드를 구현하세요. 프로퍼티를 자동생성으로 만들면(@property, @synthesize) 자동으로 컴파일러가 알아서 해줍니다.
! IMPORTANT
기본 setter를 오버라이드 한다면, 그 메소드 안에서 프로토콜의 validation 메소드를 호출하지 마세요.
✅ 프로퍼티가 스칼라이면 setNilValueForKey 메소드를 오버라이드 해서 nil일 때를 대비하세요.
Indexed To-Many Relationship Compliance
✅ <key> 메소드를 구현하거나, 인스턴스 변수의 이름을 <key>, _<key>로 하세요 프로퍼티를 자동생성으로 만들면(@property, @synthesize) 자동으로 컴파일러가 알아서 해줍니다.
✅ 위에거를 대체해서 countOf<Key>를 구현하세요. 그리고 objectIn<key>AtIndex 나 <key>AtIndexes:를 구현해도 됩니다.
✅ 선택적으로 get<Key>:rage: 를 구현하세요. 퍼포먼스가 올라갈 겁니다.
더불어서 프로퍼티가 수정가능하면
✅ insertObject:in<Key>AtIndex:나 insert<Key>:atIndexes:를 구현하세요
✅ removeObjectFrom<Key>ATIndex: 나 remove<Key>AtIndexes:를 구현하세요.
✅ replaceObjectIn<Key>AtIndex:withObject:나 replace<Key>AtIndexes:with<Key>:를 구현하면 성능이 좋아집니다. 선택사항입니다.
Unordered To-Many Relationship Compliance
unordered이면서 일대다 관계인 프로퍼티(NSSet 객체 같은)에 대해서
✅ set을 리턴하는 <key>를 구현하세요. 아니면 <key>나 _<key>의 이름을 가진 NSSet 인스턴스를 만드세요. 프로퍼티를 자동생성으로 만들면(@property, @synthesize) 자동으로 컴파일러가 알아서 해줍니다.
✅ add<Key>Object: , add<Key>:를 구현하세요
✅ remove<Key>Object: remove<Key>를 구현하세요.
✅ intersect<Key> 를 구현하면 성능이 좋아집니다. 선택사항입니다.
Validation
필요한 속성에 대해서 유효성 검사
validation<Key>:error:메소드를 구현하세요. 이 메소드는 값의 유효성을 나타내는 boolean값을 리턴하고, 적절할 때(NO) 일 때, error에 대한 참조를 반환합니다.