2012-03-26 3 views
0

Я реализую метод -hash для класса, который должен возвращать NSUInteger. Моя реализация для него должен был быть похож на это:Возвращения unsigned long, когда ожидается unsigned int

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

Теперь CFHash возвращает CFHashCode, который является typedef ред unsigned long, но, насколько я знаю, NSUInteger является либо unsigned long или unsigned int ,

Какие проблемы я мог бы запустить, если я возвращаю unsigned long, когда приложение ожидает unsigned int?

+0

Я думаю, что проблем не будет, даже если есть столкновения хэшей, их следует обрабатывать должным образом. – Felix

ответ

3

На какой платформе вы компилируете? Как вы указали, NSUInteger представляет собой либо unsigned long, либо unsigned int в зависимости от того, является ли ваша архитектура 32 или 64 бит. Для 64-битных приложений OS X это, безусловно, отлично.

Я думаю, что вы должны быть в безопасности даже в iOS или 32-разрядных приложениях OS X. docs описывают тип возвращаемого CFHash:

An integer of type CFHashCode that represents a hashing value for cf. 

это не веская причина, но default implementation of hash apparently uses CFHash anyway.

+0

Я компилирую для ios, но я не уверен, было ли это 32 или 64-битным. Мое главное беспокойство заключалось в том, что возвращение долгого времени приведет к переполнению 32-битных систем, но из вашего ответа это не то, о чем я должен беспокоиться? –

+0

Вы должны быть в порядке - iOS 32-бит, но вы не должны столкнуться с конфликтами с помощью CFHash с целыми числами. –

Смежные вопросы