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

実用的な管理、特に「使用しているオブジェクトの割り当て解除を回避する」 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

于 2012-11-07T11:57:23.397 に答える