2012-03-26 2 views
0

NSUInteger을 반환하는 클래스에 -hash 메서드를 구현하고 있습니다. 그것에 대한 내 구현은 다음과 유사 할 거라고 :부호없는 int가 예상 될 때 부호없는 long 반환의 파급

- (NSUInteger) hash { 
    return CFHash(self->cfObj); 
} 

이제 CFHashtypedef 에드 unsigned long하는 CFHashCode을 반환하지만 지금까지 내가 알고 있어요 같은 NSUInteger은 어느 쪽 unsigned long 또는 unsigned int .

응용 프로그램이 unsigned int 일 때 unsigned long을 반환하면 어떤 종류의 문제가 발생할 수 있습니까?

+0

해쉬 충돌이 있어도 아무런 문제가 없을 것이라고 생각합니다. 제대로 처리해야합니다. – Felix

답변

3

어떤 플랫폼을 컴파일하고 있습니까? 지적하신대로 NSUInteger은 아키텍처가 32 비트인지 64 비트인지에 따라 부호없는 long 또는 unsigned int입니다. 64 비트 OS X 응용 프로그램의 경우 이는 분명 좋습니다.

iOS 또는 32 비트 OS X 앱에서도 안전해야한다고 생각합니다.

An integer of type CFHashCode that represents a hashing value for cf. 
설득력있는 이유가 아니다

하지만 default implementation of hash apparently uses CFHash anyway 다음 docsCFHash의 반환 유형을 설명합니다.

+0

ios 용으로 컴파일 중이지만 32 비트인지 64 비트인지 확실하지 않습니다. 필자의 주된 걱정은 오랫동안 리턴하는 것이 32 비트 시스템에서 어떤 종류의 오버플로를 일으킬 것이라는 점이었습니다. 그러나 당신의 대답에서 이것은 제가 걱정해야 할 것이 아닙니다. –

+0

당신은 괜찮을 겁니다 - iOS는 32 비트이지만, 정수로'CFHash'를 사용하여 충돌을 일으켜서는 안됩니다. –