2009-03-13 9 views
1

私はヘッダファイルにビューなぜUITableViewはdeallocでアプリケーションをクラッシュさせますか?

[baseTable release]; 

ののdeallocでこれをやっている、私はこのように宣言:

何らかの理由
IBOutlet UITableView *baseTable; 
.... 
@property(nonatomic, retain) UITableView *baseTable; 

、私は「EXC_BAD _ACCESS」を取得しますdealloc。上記の行をコメントアウトすると、すべてがうまくいきます。どのように私は具体的にUITableViewとリリースで起こっているかを判断することはできますか?

答えて

1

私は、baseTable 1をどこかで何度もリリースしていると思います。

あなたはすべての保持のために1つの唯一のリリースを持っている必要があります、そこから始めて、あなたが行く方法を参照してください。トリッキーなビットは、baseTableオブジェクトを渡したどこでもrelease/retainが一致するかどうかを確認しています。だから、[baseTable release]のgrepほどシンプルではありません。残念なことにそれらを数えます:)

1

baseTableのように聞こえるようですね。それはあなたのコードをもっと見ることなく起こっているかもしれないと言うのは難しいです。そのテーブルの所有権をいつでも自動解放プールに渡していますか?オブジェクトを自動解放するときは、所有権を自動解放プールに移しているので、オブジェクトを放棄する必要があります(場合によってはインスタンス変数のnil)。

baseTableのすべての使用を調べ、テーブルの所有権を引き継ぐ可能性のあるオブジェクトがそれを解放する前に保持していることを確認する必要があります。また、UITableViewDelegateまたはUITableViewDataSourceメソッドへのパラメータとしてエイリアスを使用してテーブルオブジェクトを参照している可能性があります。

4

EXC_BAD_ACCESSバグの正確な理由を知りたい場合は、NSAombieを有効にして、割り当て解除されたオブジェクトのメソッドを呼び出すたびに、オブジェクトとそのメソッドが正確にわかります。左側の「グループとファイル」ウィンドウで実行可能セクションを展開

  1. :NSZombieを有効にするには

  2. 実行可能ファイルのプロパティを開きます。
  3. 「引数」セクションを探すには、
  4. はそれを無効にするには

「YES」の値で新しい引数「NSZombieEnabled」を追加します(これは、私はそれがで何タブを忘れて、画面の下半分にあります)後で再度オンにしたい場合は、値を削除するか、チェックを外してください。使用可能にすると、実際には何も割り当てを解除しないので、必ずオンにしないでください! dealloc.Inで

if(self.tableView!=nil) 
{ 
self.tableView = nil; 
} 

場合

-1

、プロパティを使用しているあなたは、テーブルビューがnilであり、あなたがnilにそれを作っているnilをそれがあるかどうかをチェックされているこのようにチェックを入れて保管しておいてください。

関連する問題