2010-10-14 50 views
0

我必須得到一個內存泄漏,我打電話給一個圖庫視圖,該視圖顯示我第一次使用這個按鈕方法,但第二次應用程序崩潰,沒有真正的錯誤信息,我可以看到。iPhone,爲什麼我得到一個內存泄漏,我該如何解決它?

-(IBAction)graphNavButtonPressed 
{ 
    UIViewController *vc = [[GraphController alloc] init]; 

    [vc setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; 
    [self presentModalViewController:vc animated:YES]; // APP FAILS ON THIS LINE 
    [vc release]; 
    return; 
} 

Program received signal: 「EXC_BAD_ACCESS」. 
(gdb) bt 
#0 0x02889903 in objc_msgSend() 
#1 0x0279a1c0 in __useVolatileDomainsForUser() 
#2 0x0267120c in CFPreferencesCopyAppValue() 

編輯:

在GraphController viewDidLoad中,我得到這個代碼。

NSUserDefaults *myDefaults = [NSUserDefaults standardUserDefaults]; 
strCurrencySymbol = [myDefaults objectForKey:kNSUCurrency]; //HERE where it crashes 

編輯2:

伊夫在閱讀有關某人有類似的問題,引起的視圖被不正確地加載。 link text我正在做的事情可能有點奇怪。爲了使用標籤欄中的圖形庫,我加載了我的日期範圍視圖,然後在viewDidLoad中顯示圖形,然後一旦圖形關閉,日期範圍視圖仍然存在。然後用戶可以再次單擊查看圖形以顯示具有不同日期的圖形。如果我不這樣做,當關閉圖表時,我的視圖將會變爲空白。所以繼承人我怎麼叫圖。

alt text

我真的別處重用的時間範圍屏幕使圖形可能不顯示。

還有什麼建議嗎?

+0

你在GraphController中聲明瞭一個init方法嗎? – willcodejavaforfood 2010-10-14 15:12:50

+0

什麼是kNSUCurrency,它是如何定義的? – tidwall 2010-10-14 18:06:09

+0

我在#define中有一個constants.h文件kNSUCurrency @「currency」 – Jules 2010-10-14 18:51:03

回答

0

我想你不應該在同一個IBAction中釋放vc對象,因爲你可能在你之後使用它?不確定

+0

多數民衆贊成在奇怪的是,我試着autorelease而不是它工作了一段時間然後墜毀,我拿出了釋放,現在它工作正常。我不明白爲什麼會發生這種情況我雖然我們總是不得不釋放,如果我們使用alloc等 – Jules 2010-10-14 14:44:05

+0

因爲如果你分配一個對象的內存,並釋放它,而你正在使用它正常的崩潰,你有在完成對它的處理後釋放對象。 – JonLOo 2010-10-14 14:46:58

+0

可能你的程序試圖訪問那個IBAction後的對象,所以你得到了崩潰,也許你應該在IBAction方法之外聲明你的UIView控制器,在方法中分配它並在完成時釋放它 – JonLOo 2010-10-14 14:49:55

0

您發佈的代碼在內存管理方面是正確的。如果您在VC(或其發佈版)上的演示中遇到問題,請檢查GraphController的init,viewDidLoad和dealloc中的內存管理。這個問題最有可能發生在某個地方。

此外,該堆棧跟蹤看起來像在圖形庫中的某些東西正在嘗試訪問用戶首選項和失敗,所以我會檢查GraphController調用CFPreferencesCopyAppValue並確保它被正確調用。

+0

請參閱上面的編輯,不知道爲什麼這應該是導致崩潰? – Jules 2010-10-14 16:26:25

+0

奇數,編輯使它看起來像standardUserDefaults正在返回釋放的內存。嘗試通過遍歷調試器來查看究竟發生了什麼。 – kevboh 2010-10-14 17:08:36

+0

它絕對是那條線。 – Jules 2010-10-14 17:20:17

相關問題