如果沒有調用dealloc,你仍然可以保留你的UIViewControllers。
也許你在這些UIViewControllers中設置了代表或其他類,它們保留並引用了備份樹(循環引用)。
你可以調試的方法是在你的UIViewController中重載保留和釋放,並設置一個斷點並記錄retainCount。
這是一段神奇的片段,當我無法弄清楚爲什麼我仍然保留着某些東西時,它會幫助我渡過難關。
- (id)retain
{
NSLog(@"retain \t%s \tretainCount: %i", __PRETTY_FUNCTION__ , [self retainCount]);
return [super retain];
}
- (void)release
{
NSLog(@"release \t%s \tretainCount: %i", __PRETTY_FUNCTION__ , [self retainCount]);
[super release];
}
- (id)autorelease
{
NSLog(@"autorelease \t%s \tretainCount: %i", __PRETTY_FUNCTION__ , [self retainCount]);
return [super autorelease];
}
__PRETTY_FUNCTION__
是鐺的特殊隱藏宏給出了一個漂亮的Objective-C函數名作爲字符數組。
1.不是30MB。較舊的iOS設備只有128MB內存,所以你的應用程序本身可以填充大約23%... 2.如果你真的泄漏了30MB,你可能不會釋放某些東西,它不是'UINavigationController'的錯誤。 – 2010-07-06 13:20:36
Hi Douwe, 感謝您的回覆。 爲什麼我懷疑UINavigationController,因爲我一直在推送視圖控制器。當我從導航控制器彈出視圖控制器時,不會調用dealloc方法,在這裏我釋放已定義的實例變量。內存不會被所有這些實例變量所使用。 我做錯了什麼?我是否必須在其他地方清除實例變量,而不是在dealloc中? – Sunil 2010-07-06 14:35:47
你有任何其他引用到你的視圖控制器,在你的應用程序的其他地方?如果你彈出它們,但仍然有其他地方參考控制器,它不會得到GCed – blueberryfields 2010-09-28 15:30:33