Почему NSNotFound не -1, а NSIntegerMax - PullRequest
       1

Почему NSNotFound не -1, а NSIntegerMax

7 голосов
/ 18 февраля 2012

NSNotFound определяется как NSIntegerMax, который имеет разные значения для 32-разрядных и 64-разрядных, что создает много неудобств для постоянной и распределенной среды.Почему бы не определить его как -1?

PS. В ObjC и Cocoa некоторые методы indexOf ... возвращают NSNotFound, но некоторые возвращают -1, по этой причине эти результаты противоречивы.

Ответы [ 3 ]

12 голосов
/ 18 февраля 2012

Это примечание от документов , вероятно, имеет отношение:

Особые замечания

До Mac OS X v10.5 NSNotFound было определено как0x7fffffff.Для 32-битных систем это было фактически так же, как NSIntegerMax.Для поддержки 64-битных сред NSNotFound теперь формально определен как NSIntegerMax.Это означает, однако, что значение отличается в 32-разрядных и 64-разрядных средах.

10 голосов
/ 18 февраля 2012

Ну, ответ, вероятно, не потому, что он иногда возвращается как значение без знака - в Objective-C преобразования между знаком и без знака фактически являются битовыми копиями, так что вы можете сравнить без знака с -1 и получить ожидаемый ответ (все значения - -1 со знаком, максимальное целое как без знака).См. ответ на этот вопрос .

Итак, мы подошли к вашей второй части вопроса, почему в несоответствии?Что ж, разнообразие - это пряность жизни , или, говоря иначе, теперь это не так странно, как люди - люди просто непоследовательны, не сложнее этого!

7 голосов
/ 18 февраля 2012

Почти наверняка, потому что некоторые функции, которые его возвращают, возвращают значение без знака , например NSIndexOfObject:

- (NSUInteger)indexOfObject:(id)anObject
//   ^
//   Note this!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...