[英]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.