0

Appleのサンプルコードでは、tableView:cellForRowAtIndexPath:aのメソッドはUITableViewDataSource保持カウントが1のセルを返します。割り当てますが、自動リリースはしません。ただし、静的アナライザーは、メソッド名が「new」などで始まらないため、これがCocoaの命名規則に違反していると文句を言います。ドキュメントには、セルの予想される保持数については記載されていません。セルにはどのような保持カウントが必要ですか?ドキュメントに対してバグを報告する必要がありますか?ありがとう。

編集:私が見たサンプルコードはそれを自動リリースします、そして私の目はどういうわけかそれをスキップしました。時間を無駄にしてすみません。回答ありがとうございます。

さらなる編集:質問者が質問でその用語を使用するためにジャンプする場合は、おそらくClangに対してバグを提出する必要があります。:-)

4

5 に答える 5

3

の値retainCountはそれほど重要ではありません(一見未知の理由で上下する可能性があります)。ただし、で作成されたセルはtableView:cellForRowAtIndexPath:自動解放する必要があります。どのサンプルコードを見ていますか?

于 2010-08-11T17:26:05.703 に答える
2

どのサンプルコード?MyTableViewController.mは、またはのいずれ[tableView dequeueReusableCellWithIdentifier:kCellID]かを返します[[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellID] autorelease]

サンプルコードが何か違うことをするなら、それはおそらく間違っています。ほぼすべてのメソッドは、Objective-Cの命名規則に従います。明示的に文書化される傾向がないもの。

于 2010-08-11T17:28:46.867 に答える
0

保持カウントは常に少なくとも1です。保持カウントがそれより少ないオブジェクトを返すことは決してありません。それはすでに元のオブジェクトになります。保持数から結論を導き出したり、それらについて期待したり、あるいはそれらを見たりしないでください。決して決して決して決して決して決して。

間違ったことをする危険なサンプルコードがあちこちにあるかもしれません。それを無視します。正しいことをし、残りのことを心配しないでください。

于 2010-08-11T17:32:33.800 に答える
0

実際、retainCountはまったく使用しないでください。私はとても混乱し、それは私を完全に間違った方向に導き、私は文字通り間違った漏れを探すのに何日も無駄にしました。カウントが上がっても下がっても絶対に何も意味しません!それに対処するために秒を無駄にしないでください。

リークツールまたはゾンビツールを使用することをお勧めします。

(psもwalkytalkyに感謝します-私が見ただけで彼もこれに答えました!)

于 2010-08-11T17:34:28.320 に答える
0

保持数について心配する必要はありません。あなたallocはあなたの中にいUITableViewCellますcellForRowAtIndexPath:、それはあなたがそれを解放しなければならないか、あなたがメモリリークを持っていることを意味します。セルを返して、テーブルビューにサブビューとして描画させてから解放する必要があるため、解放できません。したがってautorelease、自動解放プールに後で解放させる必要があります。返却すると、まだ解放されていませんが、後でシステムによって解放されます(返却後にセルへの参照を維持しないため、所有権を放棄しただけです。これは必要なことです。関数から)。

于 2010-08-11T17:37:15.197 に答える