在我的一個應用程序中,我提供了一個登錄視圖控制器,如代碼所示。這很好,除了當我註銷應用程序並重新登錄時,同樣的方法被調用,並且它最終創建了一個新的MyLandingController
,以保持舊的仍在附近。因爲,我將它分配給一個屬性,不應該讓汽車解除舊的分配?我檢查並確保沒有其他對象保留對MyLandingController
的強烈參考;儘管如此,還是有一些弱點。重新登錄iOS應用程序時發生內存泄漏
- (void)presentMyLandingView {
self.navigationController = nil;
[[self.window viewWithTag:100] removeFromSuperview];
self.window.backgroundColor = [UIColor whiteColor];
self.primaryViewController = [[MyLandingController alloc] init];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.primaryViewController];
[self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];
[self.window insertSubview:[self.navigationController view] atIndex:1];
self.window.rootViewController = self.navigationController;
[NSTimer scheduledTimerWithTimeInterval:.50 target:self selector:@selector(clearSubviews) userInfo:nil repeats:NO];
}
作爲一個臨時的解決辦法,我認爲把一個條件,如果我的大MyLandingController
存在,那麼使用而不是創建一個新的。這修復了泄漏,但整個視圖向上移動(看起來像通過導航欄大小向上移動)。
所以,我要尋找答案,在這裏2個問題 -
Q1)爲什麼重新初始化一個新的視圖控制器對象不解除分配舊的對象的屬性。 Q2)爲什麼重新使用現有對象(從弱引用拉出)不能很好地呈現UI - 屏幕向上移動?
爲什麼你還沒有對導航控制器&self.primaryViewController進行修改。導航控制器正在這裏發生。 –
已經嘗試過 - 沒有運氣! – Abhinav