所以不知何故,我的 weakSelf
变量在我的 block 有机会执行之前被释放了。这只发生在一个特定的场景中,其他时候我点击这个 block 它工作正常。这是我的代码的样子:
__weak typeof(self) weakSelf = self;
DBTEligibleAccountFetcher *accountFetcher = [[DBTEligibleAccountFetcher alloc] init];
NSArray *eligibleDepositAccounts = [accountFetcher fetchDepositEligibleAccounts];
if(eligibleDepositAccounts.count == 1) {
DBTDepositAmountLimitsHandler *limitChecker = [[DBTDepositAmountLimitsHandler alloc] init];
[limitChecker handleRequest:self.navigationController bankAccount:eligibleDepositAccounts.firstObject completionBlock:^(DBDepositCheckAccountLimits *limitDetails) {
containerController.limitDetails = limitDetails;
[weakSelf.navigationController handleNewRootPush:containerController withCompletion:completionBlock animated:YES];
}];
} else {
[self.navigationController handleNewRootPush:containerController withCompletion:completionBlock animated:YES];
}
当它到达 weakSelf.navigationController...
行时,weakSelf
为 nil。我不确定如何调试它,或者变量在使用之前如何被释放。
有谁知道现在可能发生的任何情况?或者关于如何调试此问题的任何提示?
最佳答案
假设您有一个 View Controller ,用户点击一个按钮,因此您将一些信息异步发送到服务器,并准备好在请求返回时进行处理。同时,您的用户切换到另一个 View ,并且您的 View Controller 在您的方法返回之前被释放。
首先考虑您希望发生什么。有时,如果 View Controller 消失了,请求就会变得毫无意义。假设您有一个将德语翻译成法语的网站。如果翻译返回并且您的 View Controller 消失了,您只需忽略结果。但是如果你必须处理结果,无论 View Controller 是否存在,那么你需要重新安排你的代码,以便即使 View Controller 为零它也能工作,因为用户切换到不同的 View 。
关于ios - weakSelf 在 block 之前被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36188755/