2009-02-27 26 views
5

Tôi tò mò về mức độ tốn kém của tài nguyên như là tải lại của UITableView? Tôi có một ứng dụng sẽ thực hiện khoảng 10 yêu cầu HTTP tiếp theo, và vì nó nhận dữ liệu/preps, nó sẽ tải lại tableView. Khi tập dữ liệu phát triển lớn hơn và lớn hơn, nó trở nên rất chậm chạp. Tôi đang cố gắng tìm ra nếu đó là vì số lần tôi tải lại tableView hoặc vì cách tôi lấy/phân tích dữ liệu.Mức tải lại của UITableView là bao nhiêu?

Thực tiễn tốt nhất trong trường hợp này là gì?

Trả lời

5

Cách thực hành tốt nhất là triển khai cellForRowAtIndexPath: của bạn càng ít càng tốt. Trong thực tế, nó thực sự không nên làm bất kỳ công việc ngoại trừ populating trường hợp UITableViewCell với các dữ liệu cần thiết để hiển thị.

Bạn nên sử dụng bộ nhớ cache UITableViewCell để bạn không phải phân bổ ô mới mỗi lần. Nếu bạn có thể làm phân tích cú pháp của bạn và như vậy trong một chủ đề riêng biệt và làm cho dữ liệu được phân tích cú pháp, sẵn sàng để trình bày, có thể truy cập vào cellForRowAtIndexPath:, bạn không nên có bất kỳ vấn đề hiệu suất nào.

Bạn không nói nếu bạn đang sử dụng lớp con tùy chỉnh UITableViewCell, nhưng nếu bạn đang có, phân cấp chế độ xem sâu cũng có thể trình bày vấn đề hiệu suất, vì mỗi lượt xem trong cấu trúc phân cấp được vẽ. Bạn có thể làm phẳng hơn UITableViewCell s, càng tốt.

Hy vọng bạn sẽ di chuyển đúng hướng.

+0

Nếu anh ấy đang thực hiện các yêu cầu HTTP, tôi tin rằng những điều đó đang diễn ra theo một chủ đề khác miễn phí, trừ khi bạn đặc biệt yêu cầu không. –

4

Điều tốt nhất cần làm là lập hồ sơ ứng dụng của bạn để xem vị trí chậm.

Điều đó nói rằng, nếu các tế bào bảng của bạn là tất cả cùng một chiều cao, sau đó tôi nghĩ

reloadData

chỉ có gọi

cellForRowAtIndexPath

cho các ô hiển thị trên màn hình.

1

Khởi động vào đầu đúng.

Tôi đang tiến hành cập nhật danh sách bài viết từng bước một trong Instapaper và tôi gọi -reloadData trên mỗi lần tải xuống hoàn tất. Âm thanh tương tự như những gì bạn đang làm. Nó không dẫn đến bất kỳ sự chậm trễ hiệu suất đáng chú ý nào.

2

Bảng chi phí xem tải lại là:

  1. Tìm ra bao nhiêu phần và hàng mỗi phần bạn có
  2. nhận được chiều cao dòng.

Chiều cao hàng cụ thể được tìm ra cho tất cả các thành phần của bảng, bất cứ khi nào bạn gọi lại dữ liệu.

Chi phí còn lại là cellForRowAtIndexPath, thường không quá tệ vì chỉ được gọi cho nhiều hàng như trên màn hình. Nó có thể xấu khi di chuyển nếu bạn không sử dụng lại các ô như bạn được cho là vậy.

Chìa khóa cho bạn có lẽ là tự hỏi mình cái gì sẽ kích hoạt tải HTML và có thể di chuyển nó vào một chuỗi nền.

15

Từ UITableView.h:

- (void)reloadData;     // reloads everything from scratch. redisplays visible rows. because we only keep info about visible rows, this is cheap. will adjust offset if table shrinks 

"Đây là giá rẻ."

triển khai các phương pháp xem bảng của bạn tốt và sẽ không có vấn đề gì khi gọi hàm này mọi lúc.

Trên một lưu ý phụ, bạn nên cố gắng sử dụng các phương pháp thích hợp để tạo hiệu ứng thêm và xóa các hàng nếu bạn đang nghĩ đến việc sử dụng reloadData cho điều đó.

+1

+1 để sử dụng tài liệu! – wjl

Các vấn đề liên quan