Nếu tôi sử dụng danh mục sử dụng objc_setAssociatedObject
để thêm thuộc tính giả vào đối tượng, làm cách nào để đảm bảo chúng được phát hành đúng cách? Tôi có phải giải phóng chúng theo cách thủ công trong dealloc
không?Cách giải phóng các đối tượng được liên kết qua objc_setAssociatedObject?
Trả lời
Hành vi bạn chỉ định xác định cách bộ nhớ được quản lý cho loại đó. Nếu bạn chọn giữ lại hoặc sao chép đối tượng sẽ được phát hành khi cá thể của lớp bạn thêm tham chiếu liên quan đến được deallocated. Điều đó làm cho việc giữ lại và sao chép các hoạt động hành vi được ưu tiên cho các lớp Objective-C. Gán cũng hữu ích để tránh giữ lại chu kỳ miễn là bạn đặt tham chiếu đến nil khi thực hiện với đối tượng.
Constants
OBJC_ASSOCIATION_ASSIGN Chỉ định một tham chiếu yếu đến đối tượng liên quan.
OBJC_ASSOCIATION_RETAIN_NONATOMIC Chỉ định một tham chiếu mạnh mẽ cho đối tượng được liên kết và liên kết là không được thực hiện một cách nguyên tử.
OBJC_ASSOCIATION_COPY_NONATOMIC Chỉ định rằng đối tượng liên quan được sao chép và liên kết không được thực hiện nguyên tử.
OBJC_ASSOCIATION_RETAIN Chỉ định tham chiếu mạnh đến đối tượng được liên kết và liên kết được tạo thành nguyên tử.
OBJC_ASSOCIATION_COPY Chỉ định rằng đối tượng liên quan được sao chép, và liên kết được tạo thành nguyên tử.
Mặc dù bạn đã trả lời câu hỏi của riêng bạn, vẫn còn, vì bạn không bao gồm các văn bản tài liệu riêng của mình, và các trang web mà bạn liên quan đến không còn có sẵn, ở đây nó là để thuận tiện của người khác:
Từ Apple Objective-C Runtime Reference
void objc_removeAssociatedObjects(id object)
Loại bỏ tất cả các hiệp hội cho một đối tượng nhất định.
Mục đích chính của chức năng này là để làm cho nó dễ dàng để trả về một đối tượng đến một "trạng thái nguyên sơ”. Bạn không nên sử dụng chức năng này cho loại bỏ chung của các hiệp hội từ đối tượng, vì nó cũng loại bỏ hiệp hội rằng khác khách hàng có thể bổ sung vào đối tượng. Thông thường bạn nên sử dụng
objc_setAssociatedObject
với một giá trị nil để rõ ràng một hiệp hội.
- 1. Con trỏ không liên kết được giải phóng, trong Java?
- 2. Có removeObject giải phóng đối tượng trong một NSMutableArray của các đối tượng không?
- 3. Cách giải quyết GC_concurrent được giải phóng?
- 4. Lỗi Malloc: kiểm tra sai đối với đối tượng được giải phóng
- 5. Tiện ích Windows 7 không giải phóng đối tượng ActiveX
- 6. Cách giải phóng bộ nhớ?
- 7. Tìm tất cả các đối tượng không có đối tượng has_many được liên kết
- 8. jQuery: cách hủy liên kết sự kiện được liên kết với đối tượng tài liệu?
- 9. Tại sao các đối tượng được trả lại từ liên kết bỏ qua các đối số thừa?
- 10. checksum không chính xác cho giải phóng đối tượng
- 11. chuyển đổi các liên kết tượng trưng tương đối thành các liên kết tượng trưng tuyệt đối
- 12. Các đối tượng liên quan đến mục tiêu-C bị rò rỉ trong ARC
- 13. Xóa đối tượng liên quan qua OneToOneField
- 14. iterating qua các đối tượng có liên quan trong django
- 15. Các liên kết trong các đối tượng d3.js
- 16. C++ giải phóng các biến tĩnh
- 17. Bỏ qua các liên kết tượng trưng trong .gitignore
- 18. Ruby on Rails has_many thông qua các đối tượng liên kết trước khi lưu
- 19. TStringList có thể tự động giải phóng các đối tượng được gắn vào các mục của nó không?
- 20. java sẽ không liên tục giải quyết các liên kết tượng trưng trên Linux
- 21. Cách chuyển đối số cho các hàm được liên kết trong đối tượng sự kiện trong backbone.js
- 22. Ghi đè đối tượng ghi đè với các liên kết
- 23. Cách giải quyết các phụ thuộc liên kết xung đột?
- 24. Tìm hiểu URL đối tượng cho tệp phía máy khách và cách giải phóng bộ nhớ
- 25. objc_setAssociatedObject không có trong iOS?
- 26. Sử dụng Ember.js bằng Raphael.js: Cách liên kết các đối tượng Ember với các đối tượng Raphael?
- 27. WPF: Cách liên kết đối tượng với ComboBox
- 28. Bỏ qua: liên lạc khi lưu đối tượng ActiveRecord
- 29. Java: Thực hiện các đối tượng được liên kết gấp đôi
- 30. Các đối tượng liên quan trong CouchDB
đó là nhanh :) nhưng nó không phải là câu trả lời tôi đang tìm kiếm. tôi nên có cụ thể hơn trong câu hỏi của tôi, sry. – radiospiel
@ra diospiel Tôi đã nói rằng ở trên, giữ lại hoặc sao chép sẽ phát hành đối tượng cho bạn "đối tượng sẽ được phát hành khi lớp bạn thêm tham chiếu liên quan đến được phát hành" – Joe
@JoshCaswell Cảm ơn, đó sẽ là thuật ngữ chính xác. – Joe