내 getter/setter를 합성하는 대신 getter의 동작을 직접 정의해야합니다.KVC 준수 설정자?
- (void) setPath:(NSString *)path {
_path = path;
}
을 또는 내가 setValue:ForKey:
를 사용할 필요가 수행
이렇게, 나는 경고가 나는 또한 세터를 정의해야하지만이 일을 걱정했다 KVC의 준수를 내게되었다 말하는거야?
내 getter/setter를 합성하는 대신 getter의 동작을 직접 정의해야합니다.KVC 준수 설정자?
- (void) setPath:(NSString *)path {
_path = path;
}
을 또는 내가 setValue:ForKey:
를 사용할 필요가 수행
이렇게, 나는 경고가 나는 또한 세터를 정의해야하지만이 일을 걱정했다 KVC의 준수를 내게되었다 말하는거야?
예, 게시자가 KVC/KVO 규격을 준수합니다.
그렇다면 왜 둘 다 정의해야합니까? @property
선언에 atomic
이 지정 되었기 때문입니까? 이 경우 비 원자로 전환해야합니다. 자신 만의 접근자를 원자 적으로 만들 수는 있지만, 이는 상당한 추가 작업입니다. atomic
속성을 사용하는 것이 좋고 잘 이해되지 않는 한, 아마도 그렇게 할 필요는 없습니다.
잘 예상 했었지만 실제로는 비 원자를 정의하지 않았습니다. 이중 응답 덕택입니다. –
게터를 오버라이드하려면
을 사용하면 컴파일러에서 자동으로 처리 할 수 있습니다. 그건 당신이 오버라이드하지 않는 메소드를 종합 할 것입니다 (당신의 경우 세터).@synthesize
세터는 KVC를 준수합니다. 그것은 단지 불필요한 것입니다.
아마도이 경우'@ synthesize'를 사용하는 것이 좋은 스타일 일 수 있지만, 실제로는 필요하지 않습니다. 컴파일러는 수동으로 getter를 구현 했더라도 setter를 자동 합성합니다 (반대의 경우도 마찬가지입니다). 자동 합성이 비활성화 된 경우에만 두 가지 방법을 모두 구현해야합니다. 이 경우, 명시 적으로'@ synthesize'를 사용하여 컴파일러가 인스턴스 변수를 합성하도록 유도 할 수 있습니다. –
죄송합니다. 옛날 생각은 (자동 - sythesize 전에). 네, 앤드류가 말했듯이; 여기에서 직접 합성하는 이유는 없습니다. 당신은 단지 컴파일러가 당신을 위해 그것을 할 수 있습니다. –
@Rob, 제 대답을 참조하십시오. 'atomic'을 사용하여'@ 속성 '을 선언하면 (원자 단위 지정자를 생략합니다. 왜냐하면'atomic'가 기본값입니다), 접근 자 메소드 중 하나만 수동으로 구현하려고하면 컴파일러가 불평 할 것입니다. –
좋은 대답을 얻었지만 명확히하기 위해 접근자는 KVC와 호환 될 필요가 없습니다. ** 속성 **은 적절한 명명 규칙을 따르는 접근자를 가짐으로써 KVC 규격이어야합니다. "path"라는 속성의 경우,'-setPath :'는 준수하는 이름입니다. KVC는 귀하가 부동산을 어떻게 구현하는지 알 수 없기 때문에 그 방법이 무엇인지 상관 없습니다. –
Andrews 답을 작성해 주셔서 감사합니다. 나는 KVO/KVC에서 아주 새로운 것이므로 모든 것이 완전히 명확하지 않았습니다. –