1

使用儀器後,我遷移到ARC我意識到,從屏幕過渡不會清除內存。的步驟 例如:ios arc migrated項目內容清理後presentViewController

1)主屏幕A - >遊戲畫面B =內存使用情況的上升 2)遊戲結束,我從畫面B返回到主屏幕甲

對於步驟2中,存儲器用量不會降低。當屏幕B從屏幕上移除時,我想讓屏幕B消耗的內存被釋放...我該怎麼做才能確保這種釋放會發生?

從A到B:

GameVC_iPad *遊戲= [[GameVC_iPad的alloc] initWithNibName:@ 「ClassicGameVC_iPad」 束:無]; [self presentViewController:game animated:YES completion:nil];

再回到甲從乙使用該代碼來完成:

HomeVC_iPad *家= [[HomeVC_iPad的alloc] initWithNibName:@ 「HomeVC_iPad」 束:無]; home.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; [self presentViewController:home animated:YES completion:nil];

任何線索?

+0

你是不是真的要回,但不是簡單地提出了另一個視圖控制器在現有的一個... – JustSid

回答

2

當你回到一個你應該做

[self dismissModalViewControllerAnimated:YES]; 

什麼目前你正在做的是創建一個新的視圖控制器至極是錯誤的,並導航到它的另一個時間,所以這是發生了什麼事

一個禮物乙,那麼你提出一個新的答案,然後提出一個新的答案等...

另請注意,當你導航到一個新的viewController iOS緩存一些視圖數據,所以你永遠不能在之前和之後實現完美的內存使用你回去了,

0

不要創建你的家庭控制器的新副本。使用dismissViewControllerAnimated:completion:返回到現有的。

0

如果你爲b創建了一個委託類,那麼讓我們舉例說,你稱它爲BDelegate並且使得A的ViewController符合該協議,那麼你可以很容易地將一條消息傳回給A,你希望B被刪除。因此,例如,你可以創建:

BDelegate:在那裏顯然使用您的視圖控制器的實際名稱

@interface AViewController : UIViewController <BDelegate> 

@protocol BDelegate <NSObject> 

- (void)dismissViewB; 

@end 

然後改變A(頭文件)視圖控制器。 在視圖控制器A的主體中,添加以下方法

- (void)dismissViewB { 
    [self dismissViewControllerAnimated:YES completion:NULL]; 
} 

幾乎那裏!現在,在您的B觀看控制器,無論你想真正去除觀點,所以我想,你現在有

HomeVC_iPad *home = [[HomeVC_iPad alloc]initWithNibName:@"HomeVC_iPad" bundle:nil]; 
home.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[self presentViewController:home animated:YES completion:nil]; 

替換與

[delegate dismissViewB]; 

現在,所有你需要的視圖控制器B的內部是一個指向A的委託並指派它的實例變量。因此,在控制器B的頭部添加像

NSObject<BDelegate> *delegate; 

,並添加相應@property它在體內@synthesise它。然後,當你創建視圖控制器B,你是在你的第一篇文章,只需添加

game.delegate = self 

那麼,如果這一切都順利,當你點擊按鈕或做任何你需要做的,除去視圖,視圖控制器A將關閉它爲你:)

希望這有助於