정적 분석기를이 코드와 같이 '만들 수는 없지만 동시에 컨트롤러에 저장되는 객체를 자동으로 풀 수 없으므로 호출자에게는 쓸모가 없습니다. 이 2 가지 정적 메서드를 사용하여 어떤 뷰 (탭을 차단하지 않고도) 위에 액티비티 컨트롤러를 더 쉽게 표시하려고했습니다.메모리 누수 가능성;
PZActivityOverlayController *view = [PZActivityOverlayController displayOverView:self.view];
// Later on, when complete
[PZActivityOverlayController remove:view];
원래 코드 :
+ (PZActivityOverlayController *)displayOverView:(UIView *)aView {
PZActivityOverlayController *controller = [[PZActivityOverlayController alloc] initWithFrame:aView.superview.bounds labelText:@"Loading"];
[controller viewWillAppear:YES];
[aView.superview insertSubview:controller.view aboveSubview:aView];
return controller; // Potential leak of object stored into controller
}
+ (void)remove:(PZActivityOverlayController *)display {
[display viewWillDisappear:YES];
[display.view removeFromSuperview];
[display release]; // However it won't leak because it gets released here
}
아마도 내가 잘못 여기에 책임 체인을 가지고 있지만, 그것은 편의를 위해 단지이다. 대안은 어디서나 (DRY를 너무 많이 위반하는) 이러한 방법의 본문에있는 것을 쓰는 것입니다.
수없는 이유는 당신이 자동 해제 ** [컨트롤러 오토 릴리즈] **? 추락할까요? –
호출자가 + remove를 호출 할 때까지 객체는 이미 autorelease 풀에서 해제되었습니다. – Tatsh