2012-12-13 49 views
34

Tôi đang hiển thị danh sách các biểu tượng được tải xuống từ web có văn bản trong chế độ xem bảng. Các biểu tượng có thể được thay đổi ở phía máy chủ và tôi cần phải thay thế chúng ngay sau khi các biểu tượng mới có sẵn. Tôi thử sử dụng đoạn mã sau:SDWebImage xoá bộ nhớ cache

[imgView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"table_avatar_icon"] options:SDWebImageCacheMemoryOnly]; 

Và gọi [[SDImageCache sharedImageCache] clearMemory]; Trong callback refresh của tôi, nhưng nó không thanh trừng nội dung của bộ nhớ cache. Thêm vào đó, ngay cả khi tôi đóng ứng dụng và mở lại nó, hình ảnh vẫn còn đó.

Tôi chỉ tìm thấy một cách để xóa bộ nhớ cache và đó là bằng cách gọi [[SDImageCache sharedImageCache] clearDisk];. Chỉ hoạt động sau khi tôi đóng và mở lại ứng dụng.

Làm cách nào để buộc SDWebImage không sử dụng bộ nhớ đệm trên đĩa?

+0

Đối với tất cả những người chỉ muốn tải xuống lại một số hình ảnh mỗi lần, hãy chuyển 'SDWebImageRefreshCached' vào các tùy chọn – Eugene

Trả lời

112
SDImageCache *imageCache = [SDImageCache sharedImageCache]; 
[imageCache clearMemory]; 
[imageCache clearDisk]; 

Đừng quên đặt những dòng mã này trong số didReceiveMemoryWarning của bạn.

+20

Phiên bản hiện tại của SDWebImage sẽ tự động xóa bộ nhớ cache khi cảnh báo bộ nhớ xuất hiện. Không cần phải làm điều này và đặc biệt không cần phải xóa bộ nhớ cache trên đĩa. –

+0

bạn có thể thêm nguồn không. Phiên bản nào sẽ hỗ trợ các chức năng này chính xác? –

+5

https://github.com/rs/SDWebImage/blob/master/SDWebImage/SDImageCache.m#L65 –

9

Đặt nguồn nếu có vấn đề. Dường như tôi đã bị lừa bởi mẫu Singleton được sử dụng trong SDImageCache. Bộ nhớ cache cho tiện ích mở rộng được sử dụng trên UIImageView đang được kiểm soát bởi SDWebImageManager có một biến mẫu là SDImageCache. Nếu bạn muốn xóa bộ đệm cho phần mở rộng, bạn phải gọi các phương thức của nó là clearDisk và clearMemory.

+0

không thể gọi phương thức clearcache. [[SDWebImageManager sharedManager] clearCaches]. tôi đã thử điều này nhưng nó đang bị rơi. làm ơn giúp tôi. –

+3

@SurajShinde Không có phương pháp như vậy cho 'SDImageCache', tất nhiên nó sẽ sụp đổ. Sử dụng '[[[SDWebImageManager sharedManager] imageCache] clearDisk];', '[[[SDWebImageManager sharedManager] imageCache] clearMemory];' – Eugene

+0

Cảm ơn, Actully tôi đã sử dụng SDwebcache cũ nó không có cá thể imageCache. –

-1

Ngoại trừ phương pháp SDImageCache, tôi khuyên bạn nên kiểm tra url hình ảnh của bạn. Trong trường hợp của tôi, tôi đã thử mọi phương pháp cho imageCache và vấn đề bộ nhớ vẫn tiếp tục. Sự cố xảy ra chủ yếu trên iPhone 4s vì phần cứng không thể xử lý được.

Vấn đề chính là mã hóa và mã hóa url!

Ví dụ: hãy xem các url sau: url đầu tiên đang sử dụng "& amp" và thứ hai là không. Bởi vì ký hiệu và thư viện JSON của tôi không thể đọc được giá trị chiều rộng và chiều rộng sẽ cao hơn rất nhiều nên nó phải như vậy. Đó là lý do tại sao tôi có vấn đề về bộ nhớ.

1) /select.php?imageid=101961221 "& amp"; width = 100 "& amp"; isWatermarked = true

2) /select.phpimageid=101961221 & width = 100 & isWatermarked = true

Ngoài ra, phiên bản mới nhất của thư viện SDWebImage có bao gồm các vấn đề về bộ nhớ cache.

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