2012-01-12 1 views
0

私は配列を受け取って、これをNSObjectプロパティに格納するメソッドを持っています。コピーオブジェクトの値

- (void)updatePoints:(NSArray *)pointArrayPassed 
{ 
    pointArray = pointArrayPassed; 
    pointCount= pointArray.count; 
} 

次のコードは機能しますが、明らかにpointArrayPassedのポインタを保持していますので、呼び出しスタックを反映することができます。しかし、私がpointArrayPassedのコピーを使用すると、アプリが大きく漏れ始めます!

ポインターではなく値だけを渡す方法はありますか?

+0

どのようにコピーしますか? 'pointArray = [pointArrayPassed copy]'? – kennytm

+0

はい、申し訳ありませんが、それを追加することを忘れてしまった –

+2

あなたが言っていることを理解できません。あなたの変数の宣言方法、生涯の意味、あるいは "それができる時はコールスタックを反映する"という意味を指定しません。 –

答えて

2

現在のオブジェクトを解放せずに、スティッキングコピーをiVarに保存することはできません。そうしないと、releaseメッセージを送信できるポインタが失われてしまいました。そのため、すべての場所に漏れてしまいます。

これが優れた代替品です。

- (void)updatePoints:(NSArray *)pointArrayPassed 
{ 
    if (pointArray == pointArrayPassed) { 
     //the new array is the same as the current one. Do nothing 
     return; 
    } 
    [pointArray release]; 
    pointArray = [pointArrayPassed copy]; 
    pointCount = pointArray.count; 

} 

しかし、それはそれを行うための最もエレガントな方法はありません。

より良い方法は、copyのプロパティーとしてpointArrayを宣言することです(これは、変更可能/変更不能なクラスタークラスがあるため明白です)。また、必要に応じてカウントを返す-pointCountという別のメソッドがあります。

関連する問題