NSMutableArray对象在方法中不可访问

时间:2011-03-11 20:18:37

标签: objective-c object nsmutablearray

我的.h文件中有以下变量:

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
  }

有光明人吗? 提前致谢

3 个答案:

答案 0 :(得分:2)

这里有2个错误:

  1. 您有泄漏

    arr = [[NSMutableArray alloc] init]; //&LT; - 在这里

  2. 崩溃导致您正在创建自动释放的对象,然后在已经解除分配时尝试访问它:

    arr = [NSMutableArray arrayWithCapacity:0];

  3. 删除此行:

    arr = [NSMutableArray arrayWithCapacity:0];
    

答案 1 :(得分:2)

你正在构建两次数组。以下两行:

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

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

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

答案 2 :(得分:2)

数组的第二个init形成一个自动释放的实例。

这样做

-(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];
}
}