【UITableView】Groupedなテーブルのスクロールが重い

Posted by: daichi  /  Category: iphone開発

この件、前々から原因がわからずハマっていたのですが、暫定的な対処法がわかりました。

Groupedなテーブルというのは、テーブルのstyleがUITableViewStyleGroupedのテーブルのことで、こんな画面のことです。

総合画面

このようなGroupedな画面でスクロールさせると、アニメーションがコマ落ちしているような動きになっていました。



はじめはスクロールの際にセルの再利用が効いていないのかとか、セルの背景色が透明になっているのかとか、パフォーマンスに影響が出そうな線で調べていたのですが、特にこれといって問題はみつからず。

試しにIBでstyleをplainへ変更してみたら、スクロールがスムーズになったので、Groupedなテーブルではスクロールが重くなってしまうのか、と一旦この問題放置していました。

ですが、iphoneにデフォルトでインストールされている電話帳アプリの詳細画面も同じようなGroupedなテーブルで作っているように見えるので、やはり何か方法が絶対あるぞと、思いつきでIBでビューを生成していたところを、コードでビューを生成するように置き換えてみました。

こんなコードです。

?View Code OBJECTIVE-C
- (void)loadView {
	CGRect frame = [[UIScreen mainScreen] applicationFrame];
 
	UIView *view = [[UIView alloc] initWithFrame:frame];
	view.autoresizesSubviews = YES;
	self.view = view;
	[view release];
 
	UITableView *tv = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height) style:UITableViewStyleGrouped];
 
	tv.delegate = self;
	tv.dataSource = self;
	tv.allowsSelectionDuringEditing = YES;
	self.tableView = tv;
 
	[self.view addSubview:tv];
	[tv release];
}


するとスムーズなスクロールになりました。

このコントローラはUIViewControllerを使っていて、ViewにUITableViewをaddするようにしています。

試しに、コントローラをUITableViewControllerに変えてinitWIthStyleでGroupedを指定したところ、こちらもスムーズなスクロールになりました。

ただし、loadViewでビューを初期化すると、didReceiveMemoryWarningが頻発するようになってしまいました。

IBでビューを作成する場合よりも、loadViewでビューを作成する場合の方がメモリを食ってしまうのでしょうか。

これまではIBで用意した1つのビューを詳細画面や集計画面などの初期化時に流用していたので、消費されるメモリが少なかったということなのだろうか。

ひとまず暫定対応として、詳細画面や集計画面など画面のスクロールが必要ない画面は、IBで作成したビューでスクロールをOffにして外見上コマ落ちが発生しないようにして、スクロールが必要な画面だけをloadViewで書くようにしました。

ん〜なぜIBで作るとコマ落ちするのか原因がはっきりしていないので、気持ち悪い。

関連のあるアプリ

islot_icon
iSlot Pro 2009/03/13 リリース
ファイナンス 350円
パチスロ収支管理アプリ
app_store_badge

タグ: iphone, iSlot, iSlot Pro, objecti, objective-c, UITableView, UIViewController, アプリ, セル, パチスロ, リリース, 収支, 対処法

関連する投稿

コメント

Get Adobe Flash playerPlugin by wpburn.com wordpress themes