hidesBarOnSwipe
プロパティに問題があります。UINavigationController
です。UINavigationController hidesBarOnSwipeメモリリークの問題
概要:
私はUINavigationController
のルート図であるFirstViewControllerという名前のコントローラを持っています。 すべてはMain.storyboard
です。 FirstViewControllerには、UIButton
アクションが含まれています。そのアクションの中で、私はSecondViewControllerをインスタンス化し、それをナビゲーションスタックにプッシュします。
- (IBAction)button:(id)sender {
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
[self.navigationController pushViewController:vc animated:YES];
}
インサイドSecondViewControllerはviewDidLoad
上YES
にのみhidesBarsOnSwipe
プロパティセットがあります:
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationController.hidesBarsOnSwipe = YES;
}
とのdeallocはNSLoggedます:
- (void)dealloc {
NSLog(@"Dealloc");
}
問題:
ナビゲーションバーを隠すようにスワイプすると、deallocが呼び出されることはありません。 InstrumentsではSecondViewControllerのメモリリークを示しています。
私たちがSecondViewController上にあって、ちょうど戻るボタンを押すと、すべてが問題ありません。 Deallocが呼び出されます。
一定の種類の保持サイクルがありますが、このような状況を避ける理由と回避方法がわかりません。
ちょうど同じ問題があります。 Xcode 9.2(ベータ版) –
これはiOS 11以降の問題です。 iOS 10.3- –