위임자에 대한 강력한 참조를 보유 할 수있을뿐만 아니라보기 컨트롤러를 사용하는 블록도 확인하고 블록 내부의 약한 참조를 항상 사용해야합니다. 애플 docs에서
:

은의 당신이 HTTP 요청을하고 당신이 당신의 뷰 컨트롤러의 관점에서 서버에서 얻을 사용자에 대한 몇 가지 정보를 표시하려고한다고 가정합시다. 요청을로드하고 블록을 실행 완료 될 때까지이 경우
- (void)requestUserInfo
{
[self.client makeGETRequest:@"http://example.org/user/1/" usingBlock:^(User *user, NSError *error) {
if (error) {
[self.errorView displayWithError:error];
}
else {
self.userView.user = user;
[self.userView setNeedsLayout];
}
}];
}
, 사용자가 결과를 반환하는 요청을 기다리고 지루 그냥 페이지를 닫습니다 "뒤로"버튼을 탭 도착, 뷰 컨트롤러는 해제되지 않습니다 .
dealloc
을 무시하여 직접 볼 수 있습니다.
따라서, 필요한 경우를 제외하고 항상 블록 내부에 self
에 대한 참조 번호는 __weak
입니다.
- (void)requestUserInfo
{
__weak UIViewController *weakSelf = self;
[self.client makeGETRequest:@"http://example.org/user/1/" usingBlock:^(User *user, NSError *error) {
if (error) {
[weakSelf.errorView displayWithError:error];
}
else {
weakSelf.userView.user = user;
[weakSelf.userView setNeedsLayout];
}
}];
}
인스트루먼트는 무엇을 말합니까? – quellish
ARC를 사용할 때 개체가 즉시 공개됩니다.혹시 다른 곳의 컨트롤러에 대한 강력한 참고 자료를 보유하고 있습니까? – mAu
'navigationController = nil; '을 어딘가에 설정하고 있습니까? 'navigationController' 변수를 참조하는 모든 코드를 게시하십시오. –