[英]iphone - PushViewController does not work With Reveal Controller
[英]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對象,它都會被保留。 雖然第二行不是自動釋放你的想法。 通常,為了清楚起見,您希望autorelease
與init
在同一行。
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.