2010-11-30 7 views
0

は私がのUITableViewControllerを持っていると私はそうのようなviewDidLoadMethodにいくつかのプロパティを設定します。UITableViewが漏洩していますか?

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self.parentViewController.parentViewController action:@selector(dismissSettings)] autorelease]; 
    [self setTitle:@"Gabbai Settings"]; 

    //Set up the table 
    [self.tableView initWithFrame:self.tableView.frame style:UITableViewStyleGrouped]; 

    [self.tableView setRowHeight:65.0]; 
    [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleSingleLineEtched]; 

    [self.tableView.backgroundView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@_settings", kTheme] ofType:@"png"]]]]; 


} 

アプリはUIScrollViewControllerとUIButtonを示しています。ボタンが押されると、アプリケーションはモーダルUINavigationControllerを表示し、UINavigationControllerにはUITableViewControllerが表示されます。

なぜなら、リークは、私がUITableViewControllerを表示するときにいくつかのリークを報告します。しかし、私が//Set up the tableの後の4行をコメントアウトすると、すべてが問題ありません。 4行はコメントを外しているとき

、リーク機器は次のことを示しています

Screenshot of Leaks Instrument

私はここで何が起こっているかわからないんだけど、それは本当に迷惑なんです。私はUITableViewControllerをカスタマイズする前に同じ4行のコードを使用しました。これは新しい動作です。

何が間違っている可能性がありますか?

答えて

1

他の回答で指摘したように、あなたの問題はラインです:

[self.tableView initWithFrame:self.tableView.frame style:UITableViewStyleGrouped]; 

それは新しいUITableViewオブジェクトを作成し、それがはラインが全く無意味であることを意味しているself.tableViewを変更することはありません。それはあなたが経験しているリークを作成するだけです。それを取り除くとうまくいくはずです。

+0

どのようにしてテーブルビューのスタイルを変更できますか? – Moshe

+0

'UITableView'が作成されたときにテーブルスタイルを変更することはできません。 NIBとInterface Builderを使用していますか?その後、スタイルを変更することができます。それ以外の場合は、 'loadView'や' initWithStyle: 'を使って' UITableViewController'を作成しているときに行うことができます。 –

+0

これを削除することで問題は解決しました。 – Moshe

0

テーブルビューではなく、アレイや辞書が漏れているようです。

テーブルビューを満たすために使用している配列は何ですか?

はまた、あなたは文句を言わない[self.tableVIew initWithFrameに、 は[self.tableView setFrameCGRectMake(x,y,w,h)];

+0

を見たものを教えて。 – Moshe

+0

さて、リークのイメージによれば、漏れは配列/辞書のどこかにあります。 – WrightsCS

+0

私はUITableViewを再初期化していたときに、古いものの内容が漏れたため、NSArrayのリークが発生しました。 – Moshe

1

てみself.tableviewがすでに存在している場合、あなたは再びそれを初期化する必要はありませんします。それを一度初期化してください(これは、あなたがすでに行ったことを推測しています。おそらくペン先からロードしてください)。そして、必要なら、ここでフレームをリセットしてください。

ここでtableviewをalloc/initするだけです。

+0

私たちは勝者を持っています! + 1 – Moshe

1

たぶん、あなたはその後、変数としてuiBarButtonItemを定義してみてくださいナビゲーション左のバーボタンアイテムに割り当て、その後、あなたは&は、[ビルド]メニューの下に分析し構築してみてください

が持つボタンを離すことができますか? 2.0のObjective C文ではかなり正確です

さらに、プロパティ定義に注意する必要があります。あなたはself.tableViewを使用しています。あなたは@property(nonatomic、retain)のようなものを持っていると思いますか?一度割り当てたら、次の行のプロパティを解放する必要があります。

最後に、この行は非常に奇妙です:[self.tableView initWithFrame:self.tableView.frame style:UITableViewStyleGrouped];既に初期化したテーブルを初期化しようとしています。そうしないと、self.tableView.frameにエラーがあるはずです。それに加えて、initWithFrameメソッドは割り当てられていないものを返します。私はあなたがこれを行う良い方法を考えることができると思います。

私はチャットでこの質問に答えていますが、残念ながらあなたは切断されました。

これが役に立ちます。

2

deallocメソッドでtableViewを明示的に解放し、何が起こるかを確認してください。

いっそ、すべてのクリーン - >構築し、分析し、あなたは私が手動で `cellForRowAtIndex`メソッド内のすべてを設定しています、配列を使用していないよ

+0

この素晴らしいチップをありがとう。ときどき動作しますが、必ずしもそうではありません。 – Moshe

+0

tableViewをリリースすると、次回ロードしようとするとクラッシュします。 – Moshe

+0

誰かがあなたを助けるためにコードを投稿する必要があります。あなたが私たちに示しているのは、基本的なオブジェクト保持の問題です。その後も問題が残っている場合は、他にも多くの問題があります。 –

関連する問題