nsmutuableArray的mutableCopy,并自动释放它崩溃

时间:2012-11-07 11:49:41

标签: objective-c

我有这个:

-(NSMutableArray*)setManch:(NSMutableArray*)data
{

    NSMutableArray *manch=[data mutableCopy] ;
     // some calculations on manch
    return manch;

}

如果我尝试这样做:

NSMutableArray *manch=[[data mutableCopy] autorelease] ;

我崩溃了。

但是,我必须以某种方式release这个副本,因为我一次又一次地调用这个函数。我该怎么做?

for(int k=0;k< count;k=k+2)
    {
        if(k==count-1)
            [manch addObject:[NSNumber numberWithInt:![[manch objectAtIndex:k] integerValue] ] ];
        else
            [manch insertObject:[NSNumber numberWithInt:![[manch objectAtIndex:k] integerValue] ]     atIndex:k+1 ];
    }

1 个答案:

答案 0 :(得分:0)

我建议使用ARC。

但无论如何。自动释放在这里是正确的。所以你的错误可能就在其他地方。错误的确切含义是什么?

问题可能是阵列中的数据。简单的复制调用不会进行深层复制。因此,如果您的对象仅存在于第一个数组中,则只要该数组被释放,它们就会被释放。调试数据:查看该方法调用之前和之后存在的内容。

你应该读一下&amp;理解ios上的内存管理:

一般内存管理http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html#//apple_ref/doc/uid/10000011i

实践管理,尤其是“避免导致您正在使用的对象重新分配” http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/20000043-1000922

另请阅读 ARC http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html#//apple_ref/doc/uid/10000011i