Последствия возврата неподписанного long, когда ожидается unsigned int - PullRequest
0 голосов
/ 26 марта 2012

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

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

Теперь CFHash возвращает CFHashCode, что является typedef ed unsigned long, но насколько яосознает, что NSUInteger является либо unsigned long ИЛИ unsigned int.

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

1 Ответ

3 голосов
/ 26 марта 2012

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

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

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

Это не веская причина, но реализация hash по умолчанию *1011*, по-видимому, использует CFHash в любом случае .

...