/ / Objective-c, podivné správanie pri iterácii cez prázdny NSArray - object-c, nsmutablearray, nsarray

Objective-c, podivné správanie pri iterácii cez prázdny NSArray - object-c, nsmutablearray, nsarray

Nerozumiem tomu, čo sa deje s týmto kódom:

SortArray, čo je NSMutableArray, je prázdny, takže hodnota sortArray.count je 0.

     for (NSUInteger i = 0 ; i < (sortedArray.count -1) ; i++)
NSLog(@"Apparently %d < %d  ( [sortedArray count] %d)", i, sortedArray.count-1, [sortedArray count] );

Preto by sme nikdy nemali vstupovať do slučky, ale v protokole vidím toto:

2014-01-21 12: 11: 16,433 Názov aplikácie [445: 60b] Zrejme 0 <-1 ( [sortArray počet] 0)

Má niekto predstavu o tom, čo môže spôsobiť problém?

odpovede:

5 pre odpoveď č. 1
(sortedArray.count -1)

je celé číslo 0 bez znamienka, ktoré sa pokúša odpočítať jedno od seba, takže vaše -1 sa interpretuje ako NSUIntegerMax


0 pre odpoveď č. 2

Môžete (a mali by ste) použiť:

for (NSUInteger i = 0; i < sortedArray.count; i++)

pretože test i < sortedArray.count vráti sa NO ako 0 nie je menšie ako 0. Váš aktuálny kód, ak by malo pole obsah, by neopakoval posledný objekt v poli.


0 pre odpoveď č. 3

Problém je vo vašej logike, váš stav by mal byť:

for (NSUInteger i = 0 ; i <= (sortedArray.count -1) ; i++)

alebo

for (NSUInteger i = 0 ; i < sortedArray.count ; i++)

Vo vašom príklade odčítate 1 od nuly, čo vám dáva -1, takže -1 je menšie ako (sortArray.count -1), takže podmienka je pravdivá a vstupuje do slučky.