簡體   English   中英

pushViewController是否保留了控制器?

[英]Does pushViewController retain the controller?

我很難找出pushViewController是否保留了控制器,目前我有以下代碼(有效)...

ColorController *colorController = [[ColorController alloc] initWithNibName:nibColor bundle:nil];
[[self navigationController] pushViewController:colorController animated:YES];
[colorController release];

但我正在考慮刪除發布並添加自動釋放...

ColorController *colorController = [[[ColorController alloc] initWithNibName:nibColor bundle:nil] autorelease];
[[self navigationController] pushViewController:colorController animated:YES];

非常感激

加里

這什么都不做......

ColorController *colorController = [[ColorController alloc] initWithNibName:nibColor bundle:nil];
[[[self navigationController] pushViewController:colorController animated:YES] autorelease];

你是自動釋放pushViewController的返回值:animated:,這是無效的。

您的第一個代碼段有效且正確無誤。 pushViewController:確實保留了被推送的控制器。

編輯:在更新的代碼中,兩個樣本之間幾乎沒有差異。 兩者都保持適當的保留計數 但是,除非必要,否則避免使用autoRelease是一種“最佳做法”(特別是在內存敏感區域,如iPhone)。 這有助於您的應用程序維護更可預測和可管理的內存占用。

是的,視圖控制器被保留。

你發布的兩個代碼塊之間沒有太大的區別(至少我正在看的版本 - 其他人可能看到了一個錯誤的autorelease調用的早期版本)。 你可以使用任何一個。 這是一種風格問題。

確實如此。 無論何時將一個對象提供給另一個這樣的SDK對象,它都會被保留。 雖然第二行不是自動釋放你的想法。 通常,為了清楚起見,您希望autoreleaseinit在同一行。

ColorController *colorController = [[[ColorController alloc] initWithNibName:nibColor bundle:nil] autorelease];
[[self navigationController] pushViewController:colorController animated:YES];

如果想嘗試,你應該試試這個

id temp = [self.navigationController.viewControllers objectAtIndex:1];
[self.navigationController popToViewController:temp animated:YES];

您將被導航到堆棧中可用的任何其他先前的ViewController。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM