Я не могу сделать статический анализатор «похожим» на этот код, но в то же время я не могу автоматически высвобождать объект, который сохраняется в контроллере, поэтому он бесполезен для вызывающей стороны.Этими двумя статическими методами я попытался упростить отображение контроллера активности в любом представлении (без блокирования вкладок).
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 для меня).