2010-11-23 4 views
1
私は [anArray retainCount]配列の保持カウントを取得するために使用している..(私はこれを使用すべきではないが、私はちょうど概念を保持するために使用している知っている)

iphoneでカウントを保持する

次は私のコードです。


NSString *str = [[NSString alloc] initWithFormat:@"a,b,c,d"]; 
NSArray *anArray =[[NSArray alloc]init]; 
NSLog(@"Retain count: %i", [anArray retainCount]); 
anArray=[str componentsSeparatedByString:@","]; 
NSLog(@"Retain count: %i", [anArray retainCount]); 

出力

Retain count: 2 
Retain count: 1 

私はそれが反対だと思うが....

+0

[オブジェクトの保持回数を増やすのは何ですか?](http://stackoverflow.com/questions/1181010/what-increases-an-objects-retain-count)は読みに値するかもしれません。 – jensgram

+0

申し訳ありませんが、私はこのコードを使用すると、両方の時間が1を保持することを示しています。 Arrayオブジェクトだけが配列のために解放する必要があるので、これは正しいです – Ishu

+0

なぜorigの保持数が2だったのかは誰でも推測できます。 (しかし、あなたが値に依存しているとは言わないと言われているいくつかの人々がいるので)。 NSArrayを自動解放プールに追加することができますか? – seand

答えて

7

に行ってきました。代わりにフレンドリーなAppleのMemory Management Guideを参照してください。あなたの例では

NSArray *anArray =[[NSArray alloc]init]; 

あなたは(allocを呼び出すことによって) "anArray" を割り当てられているので、あなたはreleaseを呼び出すための責任があります。

anArray=[str componentsSeparatedByString:@","]; 

ここで、新しいオブジェクトを取得しました(元のように、seandが言ったように)。今回はオブジェクトを所有していません(componentsSeparatedByStringの名前にallocまたはcopyが含まれていないため)、オブジェクトを解放してはいけません。

retainCountが何であるか心配しないでください。あなたが所有していない物を解放しないでください。

+0

+1です。 – dreamlax

+0

あなたは次のコードが正しいことを意味しますか? NSString * str = [[NSString alloc] initWithFormat:@ "a、b、c、d"]; NSArray * anArray = [[NSArray alloc] init]; [anArray release]; anArray = [str componentsSeparatedByString:@ "、"]; // anArrayを解放しないようにしました。 – Saawan

+0

+1あなたが所有しているオブジェクトを 'new'が与えてくれたと言われたら、+ 2になります。 – JeremyP

1

ドキュメントが保持カウントは任意の有用な情報を提供することはほとんどありませんと述べて....それは反対すべきだと思いますが、 。 NOTは、保持と解放の概念について学ぶ良い方法です。

+0

これはコメントではありません..... – Saawan

+0

あなたは答えが必要な場合は質問してください。 「それは反対であるべきだと思うが... ...」というのは漠然としている。 –

5

この行... anArray = [str componentsSeparatedByString:@ "、"];

あなたは 'anArray'の元の割り当てを急いでしまいました(したがって、リークが発生しました)。 実際には、最初に[anArray release]をしたいと思います。カウント数を保持する理由だ は自分を支持を行うと、retainCount外観はメモリ管理規則がどのように機能するかを学習しようとしないでくださいバック1.

+0

+1潰しのため –

+0

+1潰しのため – dreamlax

+0

+1古くなった "保持カウント"という用語を使うのではなく、オブジェクトの所有権について話すのは、ans – Saawan