2011-06-10 113 views
0

我有一個UIViewController。在的UIViewController的頂部,我宣佈Objective-C內存管理問題,NSMutableArray

NSMutableArray *contacts; 

在我viewDidLoad方法,我稱之爲[self getContacts]基本上我初始化數組contacts。它首先初始化數組,然後它增加了一些對象:

if(contacts == nil) 
    contacts = [[NSMutableArray alloc] init]; 

[contacts removeAllObjects]; 
[contacts addObjectsFromArray:[some objects]]; 

所以,現在我的contacts被初始化。在我的viewDidLoad方法中,我甚至使用了contacts,而且效果很好。稍後,在一個方法中,我需要檢索contacts的元素,但是我得到一個EXC_BAD_ACCESS。爲什麼是這樣?爲什麼我的contacts數組在開始時不保存我初始化的對象,以及如何解決這個問題?

編輯: 當我選擇一個NavigationBarItem,然後觸發一個方法buttonWasPressed錯誤出現。在該方法中,我只是有以下幾點:

-(void)buttonWasPressed:(id)sender { 
    NSLog(@"button was pressed"); 
    if(contacts == nil) 
     NSLog(@"contacts is nil!"); 

    NSLog(@"contacts = %@",contacts); 
} 

我看「按鈕被按下」的印刷,但隨後有一個EXEC_BAD_ACCESS。

+1

請在發生錯誤訪問的情況下發布該方法的代碼。此外,當您將對象添加到數組時,它會保留這些對象。 – 2011-06-10 14:16:16

+0

好的,我發佈了該代碼。 – CodeGuy 2011-06-10 14:39:25

回答

2

這段代碼看起來不錯,沒有錯。我猜你會在別處過度釋放。打開殭屍 - 在可執行參數中添加NSZombieEnabled爲YES,它將在行上中斷,以便您可以看到過度釋放的對象。

+0

如何添加NSZombieEnabled?我該在XCode中進行此操作? – CodeGuy 2011-06-10 14:36:09

+0

展開組和文件列表中的可執行文件項目,雙擊您的可執行文件,選擇參數選項卡並將值添加到底部窗口中...名稱 - NSZombieEnabled值YES – 2011-06-10 14:40:12

+0

其中是「組和文件列表」。 – CodeGuy 2011-06-10 14:42:22