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