Lớp học của tôi có một NSArray được làm đầy với các đối tượng. Trong phương thức dealloc của tôi, tôi có thể đơn giản gọi phát hành trên NSArray của tôi không, hay tôi cần lặp lại mảng và giải phóng tất cả các đối tượng trước?Với một NSArray của các tham chiếu đối tượng, tôi có thể giải phóng tất cả các đối tượng trong mảng hoặc chỉ mảng đó không?
Trả lời
Bạn có thể gọi trực tiếp bản phát hành trên NSArray
. Việc triển khai NSArray
sẽ xử lý việc gửi release
tới tất cả các đối tượng được lưu trữ trong mảng.
Bạn sẽ có thể chỉ phát hành NSArray, và nó sẽ phát hành tất cả các đối tượng của nó, bất kể bạn đang giữ các tham chiếu khác cho họ. Nếu bạn có một đối tượng cá thể cũng tồn tại trong NSArray, bạn sẽ phải giải phóng đối tượng đó một cách rõ ràng - chỉ việc giải phóng NSArray có thể không giải quyết đối tượng bên ngoài ngữ cảnh mảng.
dealloc'ing một NSArray sẽ * luôn luôn * giải phóng tất cả các đối tượng của nó, bất kể các tham chiếu khác (có thể hoặc không thể khiến chúng được dealloc'd ngay lập tức tùy thuộc vào các tham chiếu khác); bạn đang conflating "phát hành" và "dealloc". – smorgan
Cảm ơn - đã chỉnh sửa để sửa. – Tim
NSArray giữ lại các đối tượng khi chúng được thêm vào và giải phóng chúng khi chúng bị xóa hoặc mảng được deallocated. Hãy ghi nhớ điều này, đó là khái niệm "quyền sở hữu" giữ lại/giải phóng quản lý bộ nhớ được xây dựng dựa trên đó. Nó giống với đối tượng sở hữu mảng, nếu nó cũng giữ lại các đối tượng trong mảng, bạn sẽ cần phải gửi cho họ một thông báo phát hành khác trong bản thực hiện dealloc của bạn. Nếu không, và nếu không có các đối tượng khác giữ lại chúng, chúng sẽ được deallocated khi mảng phát hành chúng.
Cảm ơn, câu đầu tiên của bạn đã cứu được ngày của tôi! –
- 1. Có removeObject giải phóng đối tượng trong một NSMutableArray của các đối tượng không?
- 2. loại bỏ đối tượng khỏi mảng chỉ với tham chiếu của đối tượng
- 3. Gson và deserializing một mảng của các đối tượng với mảng trong đó
- 4. Làm thế nào tôi có thể giải phóng một mảng các đối tượng trong một destructor Delphi 7?
- 5. NSArray đầy với các đối tượng bool
- 6. Có thể định nghĩa một mảng các cấu trúc hoặc các đối tượng trong VBA không?
- 7. Tham chiếu một mảng chữ đối tượng javascript
- 8. đối tượng Subtract trong một NSArray từ một mảng
- 9. Moustache khuôn mẫu với một mảng của các đối tượng
- 10. Loại đối tượng trong Java và mảng tham chiếu
- 11. Đối với một đối tượng, tôi có thể nhận tất cả các lớp con của nó bằng cách sử dụng phản chiếu hoặc các cách khác không?
- 12. Đối tượng tại chỉ số trong NSArray
- 13. mảng lọc javascript của các đối tượng
- 14. Không thể tạo một mảng danh sách các đối tượng
- 15. Có thể tạo một lớp Repository chung cho tất cả các đối tượng của tôi không?
- 16. mảng nhiều đối tượng
- 17. Vectơ tham chiếu đến các đối tượng
- 18. in_array trên các đối tượng có tham chiếu vòng tròn
- 19. Chuyển đổi mảng phẳng của đối tượng vào mảng lồng nhau của các đối tượng
- 20. Có thể lấy số tham chiếu đối tượng không?
- 21. Tìm tất cả các tham chiếu đến một đối tượng trong Lua
- 22. Các đối tượng trong PHP có được chuyển qua giá trị hoặc tham chiếu không?
- 23. NSArray có sao chép các đối tượng không?
- 24. Xử lý các mảng của các đối tượng trì hoãn
- 25. Tải tất cả các đối tượng có lớp vào một mảng bằng cách sử dụng jQuery
- 26. Tiêm một mảng của các đối tượng trong Guice
- 27. Tôi làm cách nào để tìm tất cả các đối tượng tham chiếu myObject?
- 28. Truy cập các thuộc tính của một mảng đối tượng
- 29. Xóa tất cả các đối tượng trong danh sách mảng tồn tại trong một danh sách mảng khác
- 30. JSON Deserialization với một mảng các đối tượng đa hình
Nên thêm: nếu bạn có số lần lưu giữ trên một trong các đối tượng có sẵn, thì bạn nên tự động trả lại * trước khi * bạn thêm nó vào mảng. –
Tôi đang bối rối. Tại sao tôi phải autorelease * trước khi * thêm nó vào một mảng? Ví dụ, tôi không thể làm một 'phát hành' sau khi thêm nó vào mảng? ví dụ: [arrayObject addObject: myObject]; [bản phát hành myObject]; –
@ Heng-Cheong Leong có, đó cũng là chấp nhận được. Vấn đề là không mạo hiểm đối tượng của bạn bị dealloc'd trước khi nó được giữ lại bởi mảng đó. –