Có hai thuộc tính quản lý bộ nhớ mới cho các thuộc tính được ARC giới thiệu strong
và weak
.
Ngoài ra copy
, rõ ràng là một cái gì đó hoàn toàn khác nhau, có sự khác biệt nào giữa strong
vs retain
và weak
vs assign
không?
Theo hiểu biết của tôi, sự khác biệt duy nhất ở đây là weak
sẽ gán nil
cho con trỏ, trong khi assign
sẽ không có nghĩa là chương trình sẽ bị sập khi tôi gửi tin nhắn đến con trỏ sau khi nó được phát hành. Nhưng nếu tôi sử dụng weak
, điều này sẽ không bao giờ xảy ra, vì tin nhắn gửi đến nil
sẽ không làm gì cả.
Tôi không biết về bất kỳ sự khác biệt giữa strong
và retain
.
Có bất kỳ lý do tại sao tôi nên sử dụng assign
và retain
trong các dự án mới, hoặc là loại bị phản đối?
weak
và strong
) và 4 vòng đời biến ( __strong
, __weak
, __unsafe_unretained
, __autoreleasing
). Xem ghi chú ARC bên dưới.
assign
khi biên dịch với ARC là một lỗi. Có rất nhiều câu trả lời bị xóa về điều này. Có vẻ như đã được thay đổi trước khi phát hành cuối cùng. unsafe_unretained
là thuộc tính ưa thích cho nhiều người trong chúng ta sớm chấp nhận. Để chứng minh đó unsafe_unretained
là thuộc tính hợp lệ, hãy xem phần "Lập trình với mục tiêu-C" của Apple trong phần "Đóng gói dữ liệu" trong tiêu đề "Sử dụng tài liệu tham khảo không an toàn cho một số lớp". Trong đó nói: "Đối với một tài sản, điều này có nghĩa là sử dụng thuộc tính unsafe_unretained:"
strong
,weak
vàunsafe_unretained
.