1
AF 네트워킹 코드에는 개체를 분명히 변경할 필요가없는 메서드에서 개체에 __block을 사용하는 몇 가지 위치가 있습니다. 예를 들어, AFHTTPSessionManager에서 GET 호출은 작업 객체에 __block을 사용합니다. 왜 그런가?AFNetworking에서 일부 반환 객체가 __block 유형으로 선언되는 이유는 무엇입니까?
마찬가지로 다른 클래스에서는 자격 증명 개체에 대해 아래와 같이 개체에 __block이 사용됩니다.
- (void)URLSession:(NSURLSession *)session
didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler
{
NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling;
__block NSURLCredential *credential = nil;
if (self.sessionDidReceiveAuthenticationChallenge) {
disposition = self.sessionDidReceiveAuthenticationChallenge(session, challenge, &credential);
} else {
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust]) {
credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
if (credential) {
disposition = NSURLSessionAuthChallengeUseCredential;
} else {
disposition = NSURLSessionAuthChallengePerformDefaultHandling;
}
} else {
disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge;
}
} else {
disposition = NSURLSessionAuthChallengePerformDefaultHandling;
}
}
if (completionHandler) {
completionHandler(disposition, credential);
}
}
내게 실수 인 것처럼 보입니다. 적어도 첫 번째는 않습니다. – CodaFi