2011-12-29 36 views
7

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ị

+1

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

Trả lời

6

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 đó.

2

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ớ.

1

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.

2

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.

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