あなたはまだこの質問への回答が必要かどうかはわかりませんが、どうしたらいいでしょうか。これをやろう。私はいくつかの前提を立てるつもりですが、パフォーマンス上の問題を抱えている場合は、実際にこれを解決する唯一の方法は、テストすることです。ビューの複雑さを理解していなければ、 。だから私はあなたがいくつかのことを試して、あなたが試していないかもしれない何かをそこに投げたと仮定しよう。
ペン先からビューを読み込むと、ファイルからそのビューが展開されます。 ローディングが50回起こっているの場合、パフォーマンス上の問題に向かうことがあります。では、他に何ができますか?テーブルビューコントローラクラスで、NSData
の新しいインスタンス変数を作成します。次に、あなたの-init
法(またはその他の指定イニシャライザ)で、プロパティリストからビューをロードします。
- (id)init
{
self = [super init];
if (self) {
// Other initialization code.
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"MyView"
ofType:@"plist"];
myData = [[NSData alloc] initWithContentsOfFile:filePath];
}
return self;
}
OK、あなたはNSData
にロードされ、このプロパティリストを持っています。さて、残りは明らかである:ここ
- (UIView *)tableView:(UITableView *)tableView
viewForHeaderInSection:(NSInteger)section
{
UIView *view = [NSKeyedUnarchiver unarchiveObjectWithData:myData];
return view;
}
私の目標は、メモリ内の全体の時間を完全にインスタンスビューを維持することでした。しかし、私は考えました、 "彼はどのようにそのplistを作成しようとしていますか?"
- (UIView *)tableView:(UITableView *)tableView
viewForHeaderInSection:(NSInteger)section
{
UIView *headerView;
if (myData == nil) {
headerView = [[UIView alloc] init];
// Configure your view, but only that part that isn’t customized.
myData = [[NSKeyedArchiver archivedDataWithRootObject:headerView] copy];
} else {
headerView = [NSKeyedArchiver unarchiveObjectWithData:myData];
}
// Now customize the view for your particular section.
return headerView;
}
あなたのコードでビューを作成するための柔軟性を提供し、うまくいけばメモリにもそれを維持し、あなたのためにそれをキャッシュする必要があること:代わりに、コードの中で、あなたのビューを作成し、ファイルからデータをロードします。やってみて!