簡體   English   中英

為什么我可能有保留周期警告

[英]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);

我有一條警告告訴我自我可能會導致保留周期? 有任何想法嗎。 干杯。

警告的原因是這樣的:

  1. 您的對象將塊保留在屬性中。
  2. 您的塊保留了您的對象,因為它訪問實例變量。

現在,您有兩個互相引用的對象。 即使沒有其他人引用它們,它們也將彼此保持生命,並且永遠不會被釋放。

這是Apple文檔中有關塊和變量的引文

如果通過引用訪問實例變量,則self會保留;

您的第二個視圖控制器與您的保留周期無關。

您可能會有一個保留周期,因為通常情況下,當父對象使用強指針指向子對象,而子對象使用另一個強指針指向父對象時,它們將保持生命,並且永遠不會消失(這就是為什么ARC)。 當您將子指針替換為弱指針時,則不會發生這種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM