2013-04-05 67 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

相关问题