이 코드에 문제가 있습니까?성공 블록으로 비동기 네트워킹 호출을 할 때 iOS - View Controller 메모리 관리
[[MyNetworkManager shared] getSomeData:param success:^(NSDictionary *response) {
self.view.backgroundColor = [UIColor redColor];
} failure:^(NSString *errorString) {
}];
특히 네트워크 작업이 완료되기 전에이 메서드를 호출하는보기 컨트롤러가 할당 해제되면 어떻게됩니까? 약하다. 자아가 강하다. 여기 요? 그 이유는 무엇?
는 네트워크 관리자는 네트워크 호출을하고 서버에서 유효한 데이터를 가져 오는 경우이 작업을 수행하여 호출 뷰 컨트롤러에 대한 응답을 반환 블록 자체이기 때문에
success(dictionary);
그것은 나에게 좋은 것 같다 아무 곳에 나 유지되지 않지만 ... 틀릴 수 있습니다.
"여기에서 self를 사용하면 네트워크 요청이 완료 될 때까지 View Controller가 할당 해제되지 않습니다." 왜 그런가요? 뷰 컨트롤러를 유지하는 것은 무엇입니까? – soleil
블록은 객체 참조가 '약함'(또는 훨씬 나쁘면 '__unsafe_unretained')이 아닌 한 블록 내에서 캡처 된 모든 객체에 대한 강력한 참조를 유지합니다. 따라서 'self'를 참조하면 블록이 해제 될 때까지 'self'에 대한 강력한 참조를 유지합니다. [Blocks Programming Topics] (https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Blocks/Articles/bxVariables.html)의 _Object 및 Block Variables_ 섹션을 참조하십시오. – Rob