2009-08-11 3 views

Trả lời

35

Không, nó không sao chép chúng. Nó giữ lại chúng. Có, bạn có thể giải phóng các đối tượng một cách an toàn sau khi thêm chúng vào mảng.

The docs, như mọi khi, đánh vần này ra rất rõ ràng:

Mảng duy trì tài liệu tham khảo mạnh để họ nội dung trong một môi trường bộ nhớ được quản lý, mỗi đối tượng nhận giữ lại tin nhắn trước khi id của nó được thêm vào mảng và một thông báo phát hành khi nó được loại bỏ khỏi mảng hoặc khi mảng được deallocated. Nếu bạn muốn có một bộ sưu tập với ngữ nghĩa quyền sở hữu đối tượng khác nhau, hãy xem xét sử dụng tham chiếu CFArray, NSPointerArray hoặc NSHashTable để thay thế.

+2

Câu trả lời hay. Cũng nên nhớ rằng + arrayWithObjects: trả về mảng không được thừa nhận ("autoreleased"), vì vậy bạn phải giữ lại nó để tránh làm mất nó, nhưng đối tượng trong mảng sẽ có khoảng chừng nào mảng đó là. –

+0

Cảm ơn rất nhiều! Bạn nên biết rằng tôi tìm kiếm tài liệu trước khi đăng trên Stack Overflow (đôi khi, tôi không bắt tất cả mọi thứ, mặc dù). Cảm ơn bạn đã dành thời gian trả lời câu hỏi của tôi. –

+1

Cảm ơn câu trả lời - mặc dù điều đó không có trong tài liệu tham khảo nữa, FYI. Theo như tôi có thể nói, toàn bộ phần đó đã biến mất. Bạn chỉ có thể phỏng đoán nó bằng cách nhìn vào thông tin phân lớp và một vài cuộc gọi hàm và chủ yếu là vì bạn đã chỉ cho tôi đúng hướng. – RonLugge