Kiedy robię NSArray
używając + [NSArray arrayWithObjects:]
, czy kopiuje te obiekty? Jeśli zwolnię obiekty po dodaniu ich do tablicy, czy napotkasz problemy?Czy NSArray kopiuje obiekty?
15
A
Odpowiedz
35
Nie, nie kopiuje ich. Zatrzymuje je. Tak, możesz bezpiecznie zwolnić obiekty po dodaniu ich do tablicy.
The docs, jak zawsze, zaklęcie to bardzo wyraźnie:
Tablice utrzymać silne odniesienia do ich zawartości w środowisku pamięci zarządzanej, każdy przedmiot otrzyma zachować wiadomość przed jej id jest dodawany do tablicy i komunikat zwolnienia, gdy zostanie usunięty z tablicy lub gdy nastąpi dezalokacja tablicy. Jeśli chcesz kolekcję z inną semantyką własności obiektu, zamiast tego użyj opcji CFArray Reference, NSPointerArray lub NSHashTable.
Powiązane problemy
- 1. spłaszczyć NSArray
- 2. Przebudować NSArray, grupując obiekty, które mają pasujące numery identyfikacyjne?
- 3. obiekty Odejmowanie w jednym NSArray z innej tablicy
- 4. NSArray zawiera metodęObject
- 5. Czy musimy sprawdzić, czy faktycznie przydzielono obiekty?
- 6. NSPredicate sprawdź NSArray, czy obiekt ma jeden z kilku ID
- 7. Zapisywanie NSArray
- 8. Różnice między [NSArray arrayWithArray:] i [NSArray copy]
- 9. Czy można filtrować NSArray według klas?
- 10. W jaki sposób boost :: ptr_vector głęboko kopiuje znajdujące się pod nim obiekty?
- 11. Czy muszę uwolnić te obiekty?
- 12. Czy JavaScript ma egzotyczne obiekty?
- 13. Czy Java optymalizuje niezmienne obiekty?
- 14. Czy Guice wstrzyknąć obiekty Scala
- 15. Sum NSArray z NSDecimalNumbers
- 16. NSArray objectAtIndex: skrótowym
- 17. Wielowymiarowy obiekt NSArray
- 18. utworzenie pustej NSArray
- 19. przekonwertować std: wektor NSArray
- 20. NSArray wypełnione bool obiektów
- 21. Kiedy funkcja glVertexPointer() kopiuje dane?
- 22. NSString z NSArray
- 23. NSArray poza granicami sprawdzić
- 24. sendfile nie kopiuje zawartości pliku
- 25. NSArray initWithObjects: nie załadunek
- 26. Konwertuj JSON na NSArray
- 27. usuwanie duplikatów w nsarray
- 28. Czy odbiornik `_` na wartości (non-pointer) nadal kopiuje wartość?
- 29. Czy foreach kopiuje każdy element, jeśli jest to tablica struktur?
- 30. C++: Czy wskaźnik char do konwersji std :: string kopiuje zawartość?
Świetna odpowiedź. Należy również pamiętać, że + arrayWithObjects: zwraca tablicę unowned ("autoreleased"), więc należy ją zachować, aby jej nie utracić, ale obiekt w tablicy będzie istniał tak długo, jak długo będzie tablica. –
Wielkie dzięki! Powinieneś wiedzieć, że przeszukuję dokumentację przed opublikowaniem w Stack Overflow (czasami jednak nie łapię wszystkiego). Dziękujemy za poświęcenie czasu, aby odpowiedzieć na moje pytanie. –
Dziękuję za odpowiedź - chociaż ta blurb już nie jest w referencji, to dla ciebie. O ile mogę powiedzieć, że cała sekcja zniknęła. Możesz to tylko wnioskować, patrząc na informacje dotyczące podklasy i kilku wywołań funkcji, a przede wszystkim dlatego, że wskazałeś mi właściwy kierunek. – RonLugge