Почему ([длина str] - 2) больше 0, когда str равен нулю? - PullRequest
1 голос
/ 26 октября 2011

Когда следующий код выполняется, он входит в цикл for и запускает NSLog.Почему это происходит?

NSString *aString = nil;

for (int i=0; i<([aString length]-2); i++) {
   NSLog(@"Inside loop.");
}

Как я понимаю, [aString length]-2 дает -2, а это меньше 0?

Ответы [ 2 ]

5 голосов
/ 26 октября 2011

Чтобы быть более точным, -[NSString length] возвращает целое число без знака, поэтому вычитание двух из нуля (помните, что вызов любого метода на nil дает ноль) не даст вам -2, это даст вам очень, оченьбольшое количество.Приведите его к int (или NSInteger), чтобы получить желаемые результаты.

0 голосов
/ 26 октября 2011

Вы запрашиваете цикл for, если i<-2; поскольку [NSString length] возвращает целое число без знака , это значение будет округлено до максимального значения int - 2.

Вы также передаете сообщение нулевому объекту: [aString length]. Я не уверен, что это определенное поведение и может возвращать странный диапазон значений, хотя я подозреваю, что он может быть достаточно умным, чтобы вернуть 0. Мои комментаторы говорят, что это подозрение верно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...