2010-07-28 19 views
12

Zastanawiasz się, czy istnieje odpowiednik Java ArrayList w Objective-C?Cel C odpowiada Java ArrayList

Lub coś, co można wykorzystać do przechowywania obiektów/danych, które nie mają ustawionego rozmiaru.

Dzięki.

Odpowiedz

17

Jak podkreślali inni, NSArray/NSMutableArray są tym, czego szukasz.

Pochodząc ze świata Java, może się okazać, że oferta kolekcji Cocoa jest dość marna. W rzeczywistości funkcjonalność jest dość obszerna. NSArray, NSDictionary i NSSet są w rzeczywistości class clusters, co oznacza, że ​​publiczny interfejs API jest "abstrakcyjną" klasą. Gdy zainicjujesz jedną z kolekcji, to, co otrzymasz, jest w rzeczywistości konkretną implementacją dostosowaną do dostarczanych danych. Te implementacje mogą również zmieniać konkretną implementację w czasie wykonywania, jeśli zmieniają się dane (np. Zwiększają rozmiar). Wszystko to jest możliwe dzięki znacznie bardziej dynamicznemu czasowi działania Objective-C, niż pozwala na to statyczne pisanie Javy (i zabezpieczenia). Strategia klastrów klasy ukrywa zatem wiele implementacji np. interfejs java.util.List za jednym API.

Szkielety kakao są nieco ograniczone w złożonych strukturach danych (tj. Zbudowane na podstawie "prymitywnych" tablic, zestawów i słowników). Może się okazać, że doskonały, open source CHDataStructures wypełnia wiele luk.

+0

Poszukuję tego samego co Julio i widzę wiele odpowiedzi, które mówią "zamknij oczy i użyj NS \ * Array ...". Ale często naprawdę chcesz wyraźnie użyć połączonej listy, np. do stałego wstawiania/usuwania dowolnego elementu (NS \ * Array nie gwarantuje tego). Wybór właściwej struktury danych w oparciu o znany wzorzec dostępu ma zasadnicze znaczenie dla wydajności. Jako początkujący w rozwoju iOS nie rozumiem, dlaczego Cocoa wydaje się odebrać tę decyzję programistom? –