2013-04-05 94 views
0

在ARC中,如果A對B有強烈的引用,並且B對A有很強的引用,則會有一個保留週期。兩個弱變量可以創建一個保留週期嗎?

下面的代碼是否也會創建保留週期?

__weak MyClass *weakSelf = self; 
    [self doSomething:^{ 

     weakSelf.someVariable = YES; 

     [weakSelf doSomething:^{ 

      weakSelf.someVariable = YES; 
     }]; 

    }]; 

回答

2

使用ARC weakSelf指針被複制,但由於它很弱,指針的副本不會導致保留計數增加。所以不,它不會創建保留週期。

2

不,它不會。事實上,如果您不保留該對象,並且出於某種原因在MyClass對象被釋放後將調用該塊,則最終會導致運行時崩潰

+1

爲什麼會導致崩潰?在對象被釋放之後,'weakSelf'不會被自動設置爲'nil'嗎? – omz 2013-04-05 19:14:39

+0

現在我不太清楚幕後究竟發生了什麼,但最近我在一個非常相似的情況下發生了崩潰,事實上我最終創建了一個臨時保留週期。這個答案[弱屬性不使用ARC調零](http://stackoverflow.com/a/9099661/384916)給出了有關弱指針的更多信息... – Tobi 2013-04-05 19:28:33

相關問題