簡體   English   中英

具有強引用和弱引用的ARC所有權

[英]ARC ownership with strong and weak references

以蘋果為例

MyViewController *myController = [[MyViewController alloc] init…];

MyViewController * __weak weakMyController = myController;
myController.completionHandler =  ^(NSInteger result) {
    MyViewController *strongMyController = weakMyController;
    if (strongMyController) {

        [strongMyController dismissViewControllerAnimated:YES completion:nil];

    }
    else {
        // Probably nothing...
    }
};

這是怎么回事 我很困惑:MyViewController * strongMyController = weakMyController;

這是否意味着weakMyController對它有強引用,所以就像weakMyController的保留計數+1一樣? 創建對弱iVar的強引用時會發生什么?

這是否意味着weakMyController對它有強引用,所以就像weakMyController的保留計數+1一樣?

對於具有其引用的所有變量,myController的保留計數相同。 它是對象的值,而不是指向該對象的變量。 它告訴運行時有許多指向該對象的強引用。

所以,線

 MyViewController *strongMyController = weakMyController;

將使該計數增加1,並確保只要我們在范圍內擁有該變量,就不會釋放視圖控制器。

在大多數情況下,在塊內的弱引用上調用方法就足夠了(在您的示例中為weakMyController )。 我認為在這種情況下,它們會使用強引用,因為其中涉及到動畫(因此,在動畫過程中,視圖控制器必須存在,如果使用弱引用,則無法保證)。

為了回答問題的另一部分,對一個對象的所有強引用和弱引用都具有相同的值(該對象的內存地址)。 強者和弱者之間的區別是當他們獲得價值時會發生什么。 對於弱引用,保留計數保持不變,而強引用則增加計數。

暫無
暫無

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

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