Không phải là hai định nghĩa giống hệt nhau.
Tuyệt đối không. Sự khác biệt chính trong hai định nghĩa mà bạn đã chỉ ra là "miễn là người khác". Đó là "người khác" là quan trọng.
Hãy xem xét những điều sau:
__strong id strongObject = <some_object>;
__weak id weakObject = strongObject;
Bây giờ chúng ta có hai gợi ý <some_object>
, một điểm mạnh và một điểm yếu. Nếu chúng ta thiết lập strongObject
để nil
thích như vậy:
strongObject = nil;
Sau đó, nếu bạn thực hiện các quy tắc bạn đã vạch ra thì bạn sẽ tự hỏi mình những câu hỏi sau:
Mạnh mẽ: "giữ cái này trong đống cho đến khi tôi không chỉ vào nó nữa"
strongObject
không chỉ ra <some_object>
bất kỳ nữa. Vì vậy, chúng ta không cần phải giữ nó.
Yếu: "giữ điều này miễn là người khác chỉ mạnh vào nó"
weakObject
vẫn chỉ đến <some_object>
. Nhưng vì không ai khác chỉ ra nó, nên quy tắc này cũng có nghĩa là chúng ta không cần phải giữ nó.
Kết quả là nó <some_object>
được phân bổ và nếu thời gian chạy của bạn hỗ trợ nó (Lion và iOS 5 trở lên) thì weakObject
sẽ tự động được đặt thành nil
.
Bây giờ xem xét những gì sẽ xảy ra nếu chúng ta thiết lập weakObject
để nil
thích như vậy:
weakObject = nil;
Sau đó, nếu bạn thực hiện các quy tắc bạn đã vạch ra thì bạn sẽ tự hỏi mình những câu hỏi sau:
Mạnh mẽ: "giữ cái này trong đống cho đến khi tôi không chỉ vào nó nữa"
strongObject
không trỏ đến <some_object>
. Vì vậy, chúng ta cần phải giữ nó.
Yếu: "giữ điều này miễn là người khác chỉ mạnh vào nó"
weakObject
không trỏ đến <some_object>
.
Kết quả là <some_object>
được không deallocated, nhưng weakObject
sẽ là nil
con trỏ.
[Lưu ý rằng tất cả những gì đang giả định <some_object>
không được trỏ tới bởi một tham chiếu mạnh khác ở một nơi khác / một số phương tiện khác để được "nắm giữ"]