ええと、この質問への回答がまだ必要かどうかはわかりませんが、一体何なのですか。これをやろう。いくつかの仮定を立てますが、パフォーマンスの問題がある場合、これを実際に解決する唯一の方法はそれをテストすることであり、ビューの複雑さについての知識がなければ、信頼できる指標を実際に取得することはできません. . だから私はあなたがいくつかのことを試したと仮定し、あなたがおそらく試していない何かをそこに捨てます.
nib からビューをロードすると、ファイルからアーカイブ解除されます。その読み込みが 50 回発生すると、パフォーマンスの問題に大きく影響する可能性があります。では、他に何ができるでしょうか?さて、テーブル ビュー コントローラー クラスで、 type の新しいインスタンス変数を作成します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;
}
これで、このプロパティ リストが にロードされました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;
}
これにより、コードでビューを作成する柔軟性が得られるはずですが、うまくいけば、ビューをメモリに保持してキャッシュすることもできます。やってみて!