保持サイクルを避けるためにブロック内で常にweakSelf
を使用する必要があると聞いてきましたが、ディスパッチブロックはどうですか?この場合、私の方法は、次のコードで私のサーバーからのエラー応答を処理します。ディスパッチブロックで「weakSelf」を使用する必要がありますか?
//handling server errors (particularly "Token Refresh Failed" ones)
-(void)handleServerErrorResponse:(NSString *)error {
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertController *alertController = [DialogHelper getAlertForSimpleAuthError:error];
if ([error isEqualToString:@"Your login session has expired"]) {
[alertController addAction:[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action)
{
[MyModelDataCenter emptyDataCenter];
[MyAPIInterface sharedInstance].authToken = nil;
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults removeObjectForKey:@"authToken"];
[defaults removeObjectForKey:@"defaultUserObjectDictionary"];
[defaults synchronize];
[AuthenticationHelper sharedInstance].loggedInUser = nil;
[self.navigationController popToRootViewControllerAnimated:YES];
}]];
}
else {
[alertController addAction:[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:nil]];
}
[self presentViewController:alertController animated:YES completion:nil];
});
}
私は他のブロックでそれを行うのと同じこのブロックでweakSelf
を使用する必要がありますか。
あなたはそれを保持する例を教えてください。 – sbarow
ここに例がありますが、いくつかの中間ステップがあります:http://stackoverflow.com/q/11822476/603977 –
あまりにもよく説明してくれてありがとう!そして例のおかげで! :) – Rafi