Tôi có một UITableView. mỗi hàng là đối tượng nặng với video, hình ảnh, vv Khi người dùng cuộn chế độ xem này làm cách nào tôi có thể giải phóng bộ nhớ của các hàng không nhìn thấy được và tải các hàng hiện tại?Các ô của UITableView sẽ không hiển thị khi không hiển thị
Trả lời
Tôi giả sử bạn đang nói về việc phát hành bộ nhớ được sử dụng bởi hình ảnh và video của hàng của bạn chứ không phải chính hàng đó.
Trong đại biểu tableview của bạn,
-(void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView
cho bạn khi di chuyển tableview đã dừng lại.
[myTableView indexPathsForVisibleRows]
cung cấp cho bạn một mảng nội dung hiển thị.
Nếu hàng của bạn không nằm trong mảng này, nó không hiển thị và bạn có thể thực hiện dọn dẹp hình ảnh/video trên đó.
Bạn có đang tái chế UITableViewCells theo khuyến nghị của Apple không? Nếu không, bạn PHẢI đọc tài liệu của Apple. Bên trong cellForRowAtIndexPath: ủy nhiệm bạn nên có một cái gì đó [customCell setMediaObjects:]. Bên trong lớp customCell của bạn, bạn có thể giải phóng tất cả các MediaObject trước đó khỏi bộ nhớ.
A Closer Look at Table-View Cells - Apple Documentation
Khi bạn gọi dequeueReusableCellWithIdentifier đầu tiên 10 (chỉ mười tế bào có thể được hiển thị tại màn hình tại một thời điểm) các tế bào sẽ được tạo ra, sau đó họ sẽ được chỉ nạp và cấu hình cho hiển thị. Vì vậy, các tế bào không được phát hành.
Như những người khác đã nói, bạn nên đảm bảo rằng bạn đang tái chế đúng ô, và không phá hủy những thứ bạn cần tạo lại khi ô được tái sử dụng.
Nhưng, bạn có thể muốn phát hành các nội dung khác mà ô hoặc chế độ xem của nó đang giữ lại. Hoặc nếu ô đó có bất kỳ yêu cầu tải xuống đang chờ xử lý nào, ví dụ: bạn có thể muốn đặt lại mức độ ưu tiên của chúng hoặc thậm chí hủy chúng khi ô bị tắt.
Tôi nghĩ rằng cách sạch nhất để làm điều này là chỉ cần ghi đè -[UITableViewCell prepareForReuse]
này được gọi khi các tế bào được đưa trở lại vào hàng đợi tái sử dụng. Nếu người dùng đang di chuyển lên và xuống bảng một cách nhanh chóng, bạn có thể không muốn làm sạch ô này ngay khi ô bị tắt màn hình (ví dụ: bằng cách xem indexPathsForVisibleRows). Tuy nhiên, khi tế bào thực sự được đưa vào hàng đợi sử dụng lại, đó là thời điểm tốt để làm việc đó vì bạn biết rằng ô sẽ không xuất hiện trở lại trên màn hình cho đến khi bạn khử và cấu hình lại.
- 1. UITableView sẽ không hiển thị headerView.xib
- 2. UITableview không hiển thị ô cuối cùng khi cuộn xuống
- 3. Nhận ô hiển thị từ UITableView pagingEnabled
- 4. Ẩn UITableView khi searchResultsTableXem hiển thị
- 5. ô pandas ipython không hiển thị
- 6. Tkinter TTK tách sẽ không hiển thị
- 7. Django CSRF thẻ sẽ không hiển thị
- 8. JSeparator sẽ không hiển thị với GridBagLayout
- 9. Custom TableCellRenderer/TreeTableCellRenderer không hiển thị các ô trong Bảng
- 10. UICollectionView indexPathsForVisibleItems không cập nhật các ô hiển thị mới
- 11. iOS: Tắt hoạt ảnh UITableView khi bàn phím hiển thị
- 12. UITableViewCell với Dấu kiểm không hiển thị
- 13. Phát hiện khi các ô MapView được hiển thị
- 14. DataGridView ToolTipText không hiển thị
- 15. Hàng sẽ được hiển thị nếu tất cả các ô của nó trống?
- 16. UITableViewCell IMAGExem không hiển thị
- 17. jqplot - không muốn hiển thị/hiển thị trục y
- 18. Tên hiển thị trên mô hình không được hiển thị?
- 19. Tại sao jQuery hiển thị/ẩn hiển thị sử dụng: không hiển thị thay vì hiển thị: bị ẩn?
- 20. Bạn có nên hiển thị lưới nếu ô trống không?
- 21. SVG được hiển thị động không hiển thị
- 22. CKEditor - Không hiển thị
- 23. hiển thị css: bảng không hiển thị đường viền
- 24. Hiểu hiển thị: ô bảng; hoạt động
- 25. FormView không hiển thị
- 26. Bóng không hiển thị trên ô trong iOS
- 27. detailTextLabel không hiển thị ban đầu
- 28. Bóng không hiển thị
- 29. tableView: cellForRowAtIndexPath: được gọi không chỉ cho các ô hiển thị?
- 30. Netbeans không hiển thị mã của tôi
sử dụng các tế bào tái sử dụng và quên việc xử lý bộ nhớ (để nó vào hệ thống) – samfisher