2011-10-27 7 views
2

なぜオブジェクトのretaincountがそのdealloc関数内で1に等しいのだろうと思います。Xcode retaincount = 1 in dealloc

-(void) dealloc 
{ 
    NSlog(@"retain count = %i ", [self retaincount]); 
    [super dealloc]; 
} 

retain count = 1オブジェクトの保持カウントは1ですが、オブジェクトはそのdealloc関数をどのように呼び出すのですか。私が知っているように、オブジェクトは、保持カウントが0に等しいときにこの関数を呼び出します。

+0

はこれが意味していますオブジェクトはまだ生きている???? ???? – SamehDos

+2

neverCount on neverCount http://stackoverflow.com/questions/4636146/when-to-use-retaincount – vikingosegundo

+1

私は同意すると、他のすべての回答が投稿されているので、保持カウントを使用しないでください。しかし、[super dealloc]を呼び出すと、最初に –

答えて

9

オブジェクトの保持カウントはゼロになることはありません。

オブジェクトをゼロにすると、オブジェクトが割り当て解除されるため、サイクルが浪費されます。 retainCountでき決してリターン0

そして:

retainCountは無用です。それを呼び出さないでください。

ありがとうございます。しかし、どのようにオブジェクトの存在をデバッグできますか?

いくつかの方法。 -deallocのdealloc、印刷何かに

  • ブレークポイントで

  • +0

    ありがとうございます。しかし、オブジェクトの存在をどのようにデバッグできますか? – SamehDos

    +0

    +1 'retaincountは役に立たない' XD –

    3

    [super dealloc];コールの前に、deallocメソッドでオブジェクトがまだ生きているとみなすことができます。これにより、selfのメッセージを呼び出して、dealloc内でいくつかのクリーンアップを行うことができます。このため、[super dealloc];は常に最後に呼び出される必要があります。 This postは、なぜdeallocの保持カウント(またはその問題についてもどこでも)を重要視してはいけない理由についていくつか詳しく説明します。