freigegeben Also irgendwie meine weakSelf
Variable wird freigegeben, bevor mein Block eine Chance hat, auszuführen. Dies passiert nur in einem bestimmten Szenario, die anderen Male, die ich diesen Block treffe, funktioniert es gut. Hier ist, was mein Code wie folgt aussieht:weakSelf wird vor dem 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];
}
Durch die Zeit, um es in die weakSelf.navigationController...
Linie bekommt, weakSelf
Null ist. Ich bin nicht sicher, wie man das debuggt oder wie die Variable freigegeben werden kann, bevor sie überhaupt verwendet wird.
Kennt jemand irgendwelche Szenarien, die gerade jetzt laufen könnten? Oder irgendwelche Tipps, wie ich dieses Problem beheben könnte?
Warum verwenden Sie 'weakSelf', wenn der Block nicht von' self' beibehalten wird? –
Angenommen, 'handleRequest: bankAccount: completionBlock:' macht etwas asynchron, hält irgendwas "limitChecker" am Leben? Was ist "Selbst" hier? –
Wie @BryanChen sagte: Keine Notwendigkeit, _weak self_ zu verwenden, es sei denn, der Block wird von _self_ beibehalten. _weak self_ in Blöcken soll Rückhaltezyklen vermeiden. (_self_ behält _block_; _block_ behält _self_ bei; beide können nicht freigegeben werden) – nielsbot