2
NSLog(@"retain count 1 for show detail -- %d",[showDetail retainCount]);

ChecklistDetail *detail = [appDelegates.arrayForChecklistDetails objectAtIndex:[sender tag]];

self.showDetail = detail;

NSLog(@"retain count 2 for show detail  -- %d",[showDetail retainCount]);

ここで、上記のコードでは、最初の nslog の出力は "retain count 1 for show detail -- 0"であり、これは正しいです。ただし、2 番目の nslog の出力は、 「retain count 2 for show detail -- 2」のようになります。

保持カウントが 2 になるのはなぜですか?

できれば助けてください....

4

3 に答える 3

2

なぜなら、あなたがするとき

self.showDetail = 詳細;

プロパティが「保持」で宣言されている場合、保持カウントに1を追加します

セッターは保持カウントを処理します。プロパティに割り当てると、セッターはプロパティに割り当てているオブジェクトの保持カウントを増やします。同様に、プロパティに nil を割り当てると解放されます。つまり、オブジェクトの保持カウントが減少します。

于 2011-02-22T10:55:39.107 に答える
1

iOS で保持カウントと変数の適切なメモリ管理を確認するには、Instruments を使用してください。保持カウント機能はあまり信頼できないため、チェックしないでください。

Xcode 4 でインストゥルメントの使用を開始するには、左上隅にある [実行] ボタンを押したままにしてから、プロファイルを押します。これにより、インストゥルメントが起動します。

次に、割り当てとリークの 2 つのセクションがあります。ここでは、メモリの割り当てと変数の管理を確認できます。

コーディングを楽しんでください...!:)

于 2012-07-03T12:57:01.263 に答える
0

あなたの showDetail プロパティにはセマンティクスが保持されていると思います。したがって、これを行うと:

self.showDetail = detail;

合成されたプロパティは保持を呼び出しています。セッターを呼び出す他の方法は、これをより明確にするかもしれません:

[self setShowDetail:detail]

つまり、保持カウントは 1 です。2 番目の保持は、配列によって保持されています。

于 2011-02-22T10:57:23.847 に答える