chúng tôi không nói hàng ngàn hàng hoặc bất cứ điều gì, mặc dù nếu có một cách để làm cho mọi thứ quy mô lên cao, tôi rất thích nó.làm động một số lượng lớn các hàng/phần trong UITableView hiệu suất kém
Tôi có một bảng với 27 phần và 180 hàng trải rộng trên tất cả các phần và kịch bản tôi đang gặp khó khăn là khi tôi tạo ảnh động cho trạng thái mô hình chỉ với 3 phần và 5 hàng và (thậm chí tệ hơn) quay lại lần nữa.
Tôi đang ghép tất cả các hoạt ảnh với beginUpdates/endUpdates. Ứng dụng của tôi khá tốt bị khóa trong 1-2 giây trên iphone4 trong khi nó tìm ra mọi thứ, sau đó hoạt ảnh bắt đầu.
Tôi đã thử cả hai làm động việc xóa/thêm mỗi hàng, giữ các phần xung quanh (và giảm số lượng hàng của chúng xuống 0 trong trường hợp xóa) và cũng chỉ làm động việc xóa/chèn các phần của chúng (khi nào số hàng sẽ giảm xuống 0). Tôi đã cho rằng cái sau sẽ cho hiệu suất tốt hơn nhưng nó không thay đổi mọi thứ.
Có điều gì có thể được thực hiện vào cuối ứng dụng để tăng tốc độ này không? Hiện tại, tôi có một đoạn mã khá thô lỗ để giải cứu các hoạt ảnh riêng lẻ nếu có hơn 20 hình ảnh, thay vào đó, chỉ chọn tải lại dữ liệu.
chỉnh sửa đây là mã hiển thị sự cố. Hiệu suất của mã này hơi tốt hơn so với mã monotouch tương đương (đó là những gì tôi đã sử dụng trước đây), nhưng nó vẫn còn khá xấu.
#import "TableViewController.h"
@interface MyTableViewDataSource : NSObject<UITableViewDataSource> {
int rows;
};
@end
@implementation MyTableViewDataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (void)setRowCount:(int)r
{
rows = r;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return rows;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.textLabel.text = [NSString stringWithFormat:@"row %d", indexPath.row];
return cell;
}
@end
@implementation MyTableViewController {
UIBarButtonItem *populateButtonItem;
};
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
populateButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Populate" style:UIBarButtonItemStylePlain target:self action:@selector(populateDataSource)];
}
return self;
}
- (void)populateDataSource
{
NSMutableArray* new_rows = [[NSMutableArray alloc] init];
[((MyTableViewDataSource*)self.tableView.dataSource) setRowCount:200];
for (int i = 0; i < 200; i ++)
[new_rows addObject:[NSIndexPath indexPathForRow:i inSection:0]];
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:new_rows withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView endUpdates];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.tableView.dataSource = [[MyTableViewDataSource alloc] init];
self.navigationItem.rightBarButtonItem = populateButtonItem;
}
@end
Dự đoán đầu tiên của tôi là các ô bảng của bạn là thủ phạm. Bạn đang sử dụng các ô tùy chỉnh? – lyricsboy
Bạn có thể đăng một số mã không? Ngoài ra: UITableViewCells của bạn có bị mờ không? – Ahti
Dụng cụ chỉ báo là nút cổ chai của bạn? Bạn đang xóa chúng với một deleteRowsAtIndexPaths duy nhất: ... cuộc gọi, hoặc nhiều cuộc gọi cá nhân? Bạn đang gọi reloadData ở giữa các hình ảnh động (bạn không bao giờ phải làm điều đó)? –