[英]Why do I have a possible retain cycle warning
我在.h中聲明了以下塊
@property (strong, nonatomic) void(^setHandedness)(BOOL hand);
它在匹配的.m中定義
setHandedness = ^(BOOL hand){
_isRightHanded = hand;
};
並傳遞給子視圖控制器,該子視圖控制器具有與聲明的塊相同的形式。 除了弱
@property (weak, nonatomic) void(^setHandedness)(BOOL hand);
以強代替弱消除警告。 但是我不明白為什么?
然后在子視圖控制器中調用該塊
setHandedness(handedness);
我有一條警告告訴我自我可能會導致保留周期? 有任何想法嗎。 干杯。
警告的原因是這樣的:
現在,您有兩個互相引用的對象。 即使沒有其他人引用它們,它們也將彼此保持生命,並且永遠不會被釋放。
這是Apple文檔中有關塊和變量的引文
如果通過引用訪問實例變量,則self會保留;
您的第二個視圖控制器與您的保留周期無關。
您可能會有一個保留周期,因為通常情況下,當父對象使用強指針指向子對象,而子對象使用另一個強指針指向父對象時,它們將保持生命,並且永遠不會消失(這就是為什么ARC)。 當您將子指針替換為弱指針時,則不會發生這種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.