2011-03-11 54 views
0

我在我的.h文件中的以下變量:的NSMutableArray對象的方法無法訪問

NSMutableArray *arr; 

然後,我有在實施方法:

void aMethod 
{ 
    if (something) 
    { 
     arr= [[NSMutableArray alloc] init]; 
    arr = [NSMutableArray arrayWithCapacity:0]; 
     [arr addObject:someObject]; 
    } 
現在

,如果我嘗試從訪問ARR任何其他方法,甚至是另一個方法,如果應用程序崩潰,我不能訪問該arr。例如:

//same method: 
    if (something else) 
    { 
     SomeObject *obj = [arr objectAtIndex:0]; //<---- it crashes on this line 
    } 

任何燈光傢伙? 在此先感謝

回答

2

有2個錯誤的位置:

  1. 你有一個泄漏

    ARR = [[NSMutableArray裏的alloc]初始化]。 // < --here

  2. 它崩潰,因爲你正在創建自動釋放的對象,然後嘗試訪問它時,它已經釋放:

    ARR = [NSMutableArray的arrayWithCapacity:0];

刪除此行:

arr = [NSMutableArray arrayWithCapacity:0]; 
+0

或者,。 – 2011-03-11 20:31:58

+0

嗨,thanksNow我沒有得到 – Steve 2011-03-11 20:33:38

+0

嗨,謝謝。現在我在這一點上沒有崩潰。但是當我訪問剛剛從數組中檢索到的對象時。我在調試器中看到以下內容:程序收到信號:「EXC_BAD_ACCESS」。它可以是NSMutableArray相關? – Steve 2011-03-11 20:35:52

2

你構建陣列的兩倍。以下兩行:

arr= [[NSMutableArray alloc] init]; 
arr = [NSMutableArray arrayWithCapacity:0]; 

第一個構造一個空數組。第二個拋出第一行的結果,並構造另一個自動釋放的空數組 - 也就是說,除非明確保留,否則不會超出當前方法。

擦拭arrayWithCapacity一行,它會按預期工作。不要忘記在dealloc發佈。

2

該數組的第二個init形成一個自動釋放的實例。

如果你想要一個`autoreleased`陣列,然後刪除`init`線,並保持`arrayWithCapacity`做到這一點

-(id)init 
{ 
self = [super init]; 
if(self) 
{ 
    arr = [[NSMutableArray arrayWithCapacity:5] retain]; 
} 
return self; 
} 

-(void)dealloc 
{ 
[arr release]; 
[super dealloc]; 
} 

-(void)aMethod 
{ 
if (something) 
{  
    [arr addObject:someObject]; 
} 
}