Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSMutableArray对象在方法中不可访问_Objective C_Object_Nsmutablearray - Fatal编程技术网

Objective c NSMutableArray对象在方法中不可访问

Objective c NSMutableArray对象在方法中不可访问,objective-c,object,nsmutablearray,Objective C,Object,Nsmutablearray,我的.h文件中有以下变量: NSMutableArray *arr; 然后我有了一个实现中的方法: void aMethod { if (something) { arr= [[NSMutableArray alloc] init]; arr = [NSMutableArray arrayWithCapacity:0]; [arr addObject:someObject]; } 现在,如果我尝试从任何其他方法或同一方法中的另

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

NSMutableArray *arr;
然后我有了一个实现中的方法:

void aMethod
{
    if (something)
    {
        arr= [[NSMutableArray alloc] init];
    arr = [NSMutableArray arrayWithCapacity:0]; 
        [arr addObject:someObject];
    }
现在,如果我尝试从任何其他方法或同一方法中的另一个if块访问arr,则应用程序崩溃,我无法访问该arr。例如:

  //same method:
  if (something else)
  {
       SomeObject *obj = [arr objectAtIndex:0]; //<---- it crashes on this line
  }
//相同的方法:
如果(其他事情)
{

SomeObject*obj=[arr objectAtIndex:0];//这里有两个错误:

  • 你漏了


    arr=[[NSMutableArray alloc]init];//这里有两个错误:

  • 你漏了


    arr=[[NSMutableArray alloc]init];//您将构造两次数组。以下两行:

    arr= [[NSMutableArray alloc] init];
    arr = [NSMutableArray arrayWithCapacity:0];  
    
    第一个方法构造一个空数组,第二个方法丢弃第一行的结果,并构造另一个自动删除的空数组,即除非显式保留,否则不会超出当前方法


    擦拭
    阵列的容量
    行,它将按预期工作。不要忘记在
    解除锁定
    中释放,您将构建两次阵列。以下两行:

    arr= [[NSMutableArray alloc] init];
    arr = [NSMutableArray arrayWithCapacity:0];  
    
    第一个方法构造一个空数组,第二个方法丢弃第一行的结果,并构造另一个自动删除的空数组,即除非显式保留,否则不会超出当前方法


    擦除
    阵列的容量
    行,它将按预期工作。不要忘记在
    dealloc
    中释放该阵列的第二个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];
    }
    }
    

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

    或者,如果您想要一个
    自动释放的
    数组,请删除
    init
    行,并保留容量为
  • 数组。您好,谢谢。现在我不会在那一点上崩溃。但是当我访问刚从数组中检索到的对象时。我在调试器中得到以下信息:程序接收信号:“EXC\u BAD\u access”。它可能与NSMutableArray相关吗?这意味着其他地方还有另一个bug。您可能过度释放了添加到数组中的对象。您能给我一个例子说明如何过度释放对象吗?这就是我填充该数组的方式:或者,如果您想要一个
    自动删除的
    数组,请删除
    init
    行,并保持
    阵列的容量
    。嗨,谢谢。现在我没有在那一点上得到崩溃。但是当我访问我刚从阵列中检索到的对象时。我在调试器中得到以下信息:程序收到信号:“EXC\u BAD\u access”。是否可能与NSMutableArray相关?这意味着其他地方存在另一个bug。您可能过度释放了添加到数组中的对象。您能给我一个如何过度释放对象的示例吗?这是我填充该数组的方式: