NSIntegerMax против NSUIntegerMax - PullRequest
6 голосов
/ 05 июля 2011
NSUInteger index = [self.objects indexOfObject:obj];

if (index == NSNotFound) {
    // Success! Note: NSNotFound internally uses NSIntegerMax
}

if (index == NSUIntegerMax) {
    // Fails!
}

Почему?Я полагаю, чтобы получить значение без знака в результате indexOfObject.Поэтому, естественно, я предполагал, что если объект не найден, он вернет NSUIntegerMax вместо NSIntegerMax.Это ошибка, или есть логическое объяснение такого поведения.

Ответы [ 3 ]

7 голосов
/ 05 июля 2011

Возможно NSNotFound можно использовать в контекстах, которые используют NSInteger.Также безопаснее, если кто-то объявляет индекс как NSInteger вместо NSUInteger.

Самое большее, можно сказать, что странно, что NSNotFound определяется как NSIntegerMax, но это, безусловно, неошибка.

1 голос
/ 05 июля 2011

Ваше предположение просто неверно.Он возвращает NSNotFound, независимо от того, это сейчас или будет в будущем.И он может легко отличаться на разных платформах (т.е. 32 против 64 бит).

Причина его существования заключается в том, чтобы использовать его.Не обманывайте себя, используя другие константы, которые могут быть такими же.

0 голосов
/ 05 июля 2011

NSUInteger не подписано ('U'), а NSInteger подписано.

Вы все еще можете сравнить значения без знака и целого числа со знаком.Предполагать, что NSNotFound фактически равен NSUIntegerMax, вероятно, является ошибкой.Фактически он определен как равный NSIntegerMax в NSObjCRuntime.h.

...