0

我有这个 :

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

1 回答 1

0

我建议使用 ARC。

但不管怎么说。自动释放在这里是正确的。所以你的错误可能在其他地方。错误的确切状态是什么?

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

您应该阅读并了解 ios 上的内存管理:

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

Practical Management, especially "Avoid Causing Deallocation of Objects You’re Using" http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/20000043-1000922

Also read about ARC: http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html#//apple_ref/doc/uid/10000011i

于 2012-11-07T11:57:23.397 回答