/ / Pomyłka długości jest używana z NSArray w obj-c - object-c, ios, nsarray, nsobject

Zamieszanie nad długością używane z NSArray w obj-c - target-c, ios, nsarray, nsobject

Korzystam z tego wiersza kodu, aby przejść przez tablicę

for (int i = 0; i < [[GameP objectForKey:@"groundMap"] length]; i += 5) {

Przypuszczam, że pochodzę z AS3„length” dałoby mi długość tablicy / obiektu, ale „właśnie odkryłem” count, który wydaje się robić to samo i nie mogę znaleźć żadnych informacji na temat używania „length”, ale wydaje się, że działa.

Czy ktoś może mi powiedzieć ...

  1. Co to jest „długość” i jak / dlaczego działa w tej linii?
  2. Jaka jest różnica między liczbą a długością?
  3. Którego lepiej użyć?

Dzięki za jakąkolwiek radę.

Odpowiedzi:

3 dla odpowiedzi № 1

Zarozumiały GameP to słownik, wezwanie do objectForKey: zwraca obiekt typu id. Więc próbujesz zadzwonić length metoda na id. Skompiluje się dobrze, ale w czasie wykonywania prawdopodobnie błędne jest założenie, że obiekt dla „groundMap” jest tablicą. Tablica ma tylko count metoda nr length metoda.

Uzyskujesz również dostęp do obiektu ze słownika dla każdej iteracji pętli. Naprawdę powinieneś napisać swój kod w ten sposób:

NSArray *groundMap = [GameP objectForKey:@"groundMap"];
NSUInteger count = groundMap.count;
for (int i = 0; i < count ; i += 5) {
}

Jest to łatwiejsze do odczytania, a kompilator może lepiej sprawdzać błędy. Jest także znacznie wydajniejszy.


0 dla odpowiedzi nr 2

Najpierw musisz znać klasę obiektu w swoim słowniku GameP. Jeśli to NSArray musisz użyć count tutaj nie ma sposobu na użycie innej metody.

Możesz znaleźć length metoda na NSSString klasa.