[英]Is this a retain cycle?
當我在自己保留的區塊中對自己打電話時,我通常會收到警告:
[self.someView doSomething:^{
self.aVar = @"Hello!";
}];
我要做:
__weak SomeObject *weakSelf = self;
[self.someView doSomething:^{
weakSelf.aVar = @"Hello!";
}];
但是如果我在weakSelf上調用一個方法,並且該方法使用self,那么即使我沒有得到警告,這會導致保留周期嗎? 我在說這個:
__weak SomeObject *weakSelf = self;
[self.someView doSomething:^{
weakSelf.aVar = @"Hello!";
[weakSelf aMethod];
}];
和aMethod使用self
只要您的weakSelf
在塊外聲明 ,就沒有保留周期。
使用塊內的對象會隱式增加保留計數。 但是你要在weakSelf
而不是self
上調用aMethod
,所以保留計數不受影響。
您應該在塊之外聲明__weak
為self
:
__weak SomeObject *weakSelf = self;
[self.someView doSomething:^{
weakSelf.aVar = @"Hello!";
[weakSelf aMethod];
}];
否則編譯器將保留self,因為它與塊一起使用。
Beter甚至使用__block
指令,因為__weak
只是iOS 5及更高版本。
__block SomeObject *weakSelf = self;
[self.someView doSomething:^{
weakSelf.aVar = @"Hello!";
[weakSelf aMethod];
}];
關於調用self並導致retain的另一種方法,我從未見過這種行為。 我總是使用__block
指令,它也可以捕獲那個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.