gpt4 book ai didi

ios - weakSelf 在 block 之前被释放

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:33:44 24 4
gpt4 key购买 nike

所以不知何故,我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com