Tôi có vách ngăn mà không ai có thể trả lời này ...
Vì vậy, tôi cuối cùng đã tìm ra cách để đạt được sự chính xác cùng hiệu quả được sử dụng trong các cửa hàng ứng dụng thực tế, liên quan đến cách thức các biểu tượng được tải xuống/hiển thị.
Lấy dự án mẫu LazyTableImages và thực hiện một vài sửa đổi đơn giản.
Đi vào bộ điều khiển xem gốc và loại bỏ tất cả các kiểm tra liên quan đến là bảng di chuyển và/hoặc giảm tốc trong cellForRowAtIndexPath
Hủy bỏ tất cả các cuộc gọi đến loadImagesForOnScreenRows, và do đó loại bỏ phương pháp đó là tốt.
Đi vào IconDownload.m và thay đổi phương thức startDownload thành không thực hiện downlaod hình ảnh không đồng bộ, nhưng thay vào đó hãy tải xuống đồng bộ hóa trên chuỗi nền.Hủy bỏ tất cả các mã trong startDownload, và thêm những điều sau đây, vì vậy nó trông như thế này:
- (void)startDownload
{
NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(loadImage) object:nil];
[queue addOperation:operation];
[operation release];
[queue release];
}
Sau đó, thêm một LoadImage, như thế này:
- (void)loadImage
{
NSData *imageData = [[NSData alloc] initWithContents OfURL:[NSURL URLWithString:appRecord.imageURLString]];
self.apprecord.appIcon = [UIImage imageWithData:imageData];
[imageData release];
[self performSelectorOnMainThread:@selector(notifyMainThread) withObject:nil waitUntilDone:NO];
}
Sau đó, thêm notifyMainThread như thế này :
- (void)notifyMainThread
{
[delegate appImageDidLoad:self.indexPathInTableView];
}
Xong! Chạy ứng dụng này và bạn sẽ thấy hành vi lưu trữ ứng dụng chính xác, không phải chờ đợi để yêu cầu tải xuống hình ảnh cho đến khi cuộn dừng và không chờ đợi hình ảnh hiển thị cho đến khi cuộn dừng hoặc cho đến khi người dùng xóa ngón tay khỏi màn hình.
Hình ảnh được tải xuống ngay khi ô sẵn sàng hiển thị và hình ảnh được hiển thị ngay sau khi được tải xuống, thời gian.
Xin lỗi vì bất kỳ lỗi chính tả, tôi không dán này từ ứng dụng của tôi, tôi đã gõ nó trong, vì tôi xa mac của tôi ngay bây giờ ...
Dù sao, tôi hy vọng điều này sẽ giúp tất cả các bạn. ..
Tuyệt vời! Cảm ơn bạn đã đăng bài này! –
Tôi đánh giá cao nỗ lực của bạn trong việc cải thiện ví dụ của Apple. Giải pháp của bạn hoạt động một phần. Di chuyển các đại biểu nên ** KHÔNG ** bị loại bỏ, hoặc trình điều khiển xem của bạn không biết khi nào bắt đầu tải xuống các biểu tượng. 'LoadImagesForOnScreenRows' cũng nên được gọi trong' viewDidLoad' hoặc 'viewDidAppear', phụ thuộc vào cách sử dụng. – Raptor
Đẹp, nhưng nó thay đổi toàn bộ mã mẫu. Nó không còn sử dụng NSURLConnection nữa. – yosh