2011-12-18 11 views
0

こんにちは私は誰かが私にメモリ管理に関するアドバイスをくれたらと思っていました。これは自動リリースされるべきですか?手動で行う方法がありますか?

私は次があります。

-(NSMutableArray*)addAllObjectesInbetween:(NSMutableArray*)betweenTheTwo{ 

    NSMutableArray* toReturn = [betweenTheTwo mutableCopy]; 
    [toReturn insertObject:@"oneObject" atIndex:1]; 

    return toReturn; 
} 

今、私はので、私は、私はtoReturnを解放しなければなりませんが、それは別の関数に返されているので、私はそれを行う方法がわからないmutableCopyを作っていますことを知っています。私はそれが送信されているそれをリリースしたくないが、私は後にそれを解放しようとすると、ちょうど呼び出されません。だから私はをmutableCopyに加えることを考えていましたが、それが最善のことなのかどうかはわかりません...誰かが私に手を貸してくれますか?ありがとう!

答えて

2

はい、これが最適です。戻しながらまた、それを追加することができます。

あなたの方法は initで始まるか(含まれている)していない場合、理由は慣例によりだ
return [toReturn autorelease]; 

copyが、それは自動解放オブジェクトを返す必要があります。 +1オブジェクトを返す場合は、メソッド名を変更して一貫性を保ちます。

+0

もし私が '[toReturn autorelease];を追加すると、それは壊れてしまいます...私はもう少し調べる必要があると思います。何かご意見は? –

+2

@JamesDunay:それ以外の何かが間違っています。あなたはsidyllの推薦のようにautoreleaseを呼び出すべきです。アプリで「Product-> Analyze」を実行して、周囲のコードでメモリの問題が発生していないかどうかを確認してください。 –

1

あなたはどちらかにautorelease toReturnべき、またはmutableCopyAllObjectsInBetween:のように、copyAllObjectsInBetween:、またはmutableCopyのように、copyを開始するにはあなたの関数の名前を変更します。

+0

でも、私がtoReturnを作成するときにはまだ漏れがあります。どうすれば対処できますか?また、私は幸運と、それをautoreleaseしようとしたので、上記のコメントを参照してください、ありがとう! –

+0

たぶん私はそれを持って、私はautoreleaseと共に返された配列を保持しようとしました、そして、今私はちょうど漏れをチェックする必要があります! –

+0

@JamesDunay:あなたは別のバグを隠しています。 retain + autoreleaseは必要ではなく、単に他の問題を起こしていない理由でオブジェクトを漏らしているだけです。 –

関連する問題