2011-09-20 4 views
0

copyWithZone을 이해하는 데 어려움을 겪고 있습니다.NSCopying 및 copyWithZone : - [self retain] 또는 다른 것을 반환해야합니까?

복사본을 반환해야한다고 알고 있지만 사전에 개체를 추가하면 'copyWithZone'개체가 사전에 추가됩니다. 실제 복사본 (즉, 새 개체)을 만들면 사전에 추가 된 개체가 같은 개체가 아닙니다. 그러나 보유 수를 늘리는 것만으로는 기술적으로 사본이 아닙니다.

본인을 그대로 유지하거나 실제 사본을 만들어야합니까?

답변

2

copyWithZone:은 변경 불가능한 객체 (클래스의 변경 불가능하고 변형 가능한 버전이있는 경우)를 반환해야합니다. 원본이 불변 인 경우 소유자 중 누구도 개체를 변형 할 수 없으므로 원본을 반환하는 &을 유지하는 것이 안전합니다. 그렇지 않으면 (원본이 변경 가능하거나 변경 불가능한/변경 가능한 이분법이 적용되지 않음) 사본을 보내십시오. NSDictionaryNSMutableDictionary에 대한

으로, 일반적으로 단지 키가 (당신이 명시 적으로 -initWithDictionary:copyItems:으로 말할 경우 항목 만 복사), 사전의 내부 데이터 구조는 키 값에 따라 필요하다 복사됩니다. 사전에서 사용중인 키를 변경하려고하면 사전의 데이터 구조가 손상되어 더 이상 해당 키의 항목을 검색 할 수 없거나 더 나 빠질 수 있습니다.