的NSMutableArray对象的方法无法访问

问题描述:

我在我的.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个错误的位置:

  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

你构建阵列的两倍。以下两行:

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

第一个构造一个空数组。第二个抛出第一行的结果,并构造另一个自动释放的空数组 - 也就是说,除非明确保留,否则不会超出当前方法。

擦拭arrayWithCapacity一行,它会按预期工作。不要忘记在dealloc发布。

该数组的第二个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]; 
} 
}