Tôi đang đọc tài liệu của Xcode và đây là điều khiến tôi khó hiểu:
__block typeof(self) tmpSelf = self;
[self methodThatTakesABlock:^ {
[tmpSelf doSomething];
}];
Phần sau được sao chép từ tài liệu:
Một khối tạo thành một tham chiếu mạnh mẽ đến các biến mà nó nắm bắt. Nếu bạn sử dụng
self
trong một khối, khối sẽ tạo thành một tham chiếu mạnh đếnself
, vì vậy nếuself
cũng có một tham chiếu mạnh đến khối (mà nó thường làm), thì một chu trình tham chiếu mạnh sẽ dẫn đến. Để tránh chu kỳ, bạn cần tạo một__block
tham chiếu yếu (hoặc ) cho bản thân bên ngoài khối, như trong ví dụ trên.
Tôi không hiểu 'yếu (hoặc __block
)' nghĩa là gì?
Là
__block typeof(self) tmpSelf = self;
và
__weak typeof(self) tmpSelf = self;
giống hệt ở đây?
Tôi tìm thấy một phần khác trong tài liệu:
Lưu ý: Trong môi trường thu gom rác, nếu bạn áp dụng cả hai
__weak
và__block
bổ ngữ cho một biến, thì khối sẽ không đảm bảo rằng nó vẫn tồn tại.
Vì vậy, tôi hoàn toàn hoang mang.