В следующем коде, как бы вы избежали вложенных блоков, увеличивая количество удержаний «я».Как управлять учетными записями в блоках очереди вложенных рассылок
Это, как я избежать вложенных блоков
-(void)openSession {
[self.loginManager logInWithReadPermissions:@[@"user_photos"]
fromViewController:[self.datasource mediaAccountViewControllerForRequestingOpenSession:self]
handler:[self loginHandler]];
}
-(void(^)(FBSDKLoginManagerLoginResult *result, NSError *error))loginHandler {
__weak typeof (self) weakSelf = self;
return^(FBSDKLoginManagerLoginResult *result, NSError *error) {
__strong typeof(weakSelf) strongSelf = weakSelf;
if (error) {
[strongSelf.delegate mediaAccount:strongSelf failedOpeningSessionWithError:error];
} else if (result.isCancelled) {
[strongSelf.delegate mediaAccountSessionOpeningCancelledByUser:strongSelf];
} else {
[strongSelf.delegate mediaAccountDidOpenSession:strongSelf];
}
[strongSelf notifyWithCompletion:[strongSelf completionHandler]]
};
}
-(void)notifyWithCompletion:(void(^)(void))completion {
[self notify];
completion();
}
-(void(^)(void))completionHandler {
return^{
//do something
};
}
Но как же избежать множества вложенных блоков, что часто бывает при использовании НОД в блоке?
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
[self parseLoadsOfData];
dispatch_async(dispatch_get_main_queue(), ^{
[self updateUI];
});
});
Есть ли здесь циклы удержания?
Почему, по вашему мнению, в любом из этих случаев будет цикл сохранения? – newacct
Передача себя в блок. –
Нет, нет * цикл *. цикл = A -> B -> A Где цикл? – newacct