好吧,我们知道如果这样做,我们可能会有一个保留周期
[someObject messageWithBlock:^{ [self doSomething]; }];
而且解决方案是这样的
__weak typeof(self) weakSelf = self;
[someObject messageWithBlock:^{ [weakSelf doSomething]; }];
但是,如果我们执行最后的代码,但是doSomething有很多关于self的引用,那该怎么办?喜欢:
- (void) doSomething {
self.myProperty = @"abc";
[self doOtherThing];
}
这样会形成保留周期吗?
那呢:
__weak typeof(self) weakSelf = self;
[someObject messageWithBlock:^{
self.onError(NSLocalizedStringFromTable(@"Error", MY_TABLE, nil))
}];
MY_TABLE在哪里是
#define
? 最佳答案
此代码中没有保留周期:
__weak typeof(self) weakSelf = self;
[someObject messageWithBlock:^{ [weakSelf doSomething]; }];
- (void) doSomething {
self.myProperty = @"abc";
[self doOtherThing];
}
说明
在上面的代码中
[weakSelf doSomething];
表示接收者对象(自身)现在已经变为weakSelf,即。在doSomething内部对self的任何调用都将指向weakSelf。
因此,在doSomething中引用self不会创建保留周期。
谈论下面的代码:
__weak typeof(self) weakSelf = self;
[someObject messageWithBlock:^{
self.onError(NSLocalizedStringFromTable(@"Error", MY_TABLE, nil))
}];
因为块内的接收者对象是self,而不是weakSelf,所以这将创建一个保留周期。
关于ios - 块的保留周期是否适用于块调用的方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43084167/