我有一个图像缓存类,它将配置文件图像存储在NSMutableDictionary中。如果密钥存在,则缓存返回UIImage对象,如果不存在,则下载它,将其存储在字典中,并返回UIImage。这种共享缓存被称为NSThreaded方法中是这样的:UITableViewCell线程中的图像缓存
[NSThread detachNewThreadSelector:@selector(setImageForUser:) toTarget:self withObject:imageUrlString];
-(void)setImageForUser:(NSString *)imageUrlString {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
LPImageCacher *imageCache = [LPImageCacher sharedCache];
UIImage *profileImg = [imageCache getCachedImageFromMemory:imageUrlString];
self.userProfileImageView.image = profileImg;
if (profileImg == nil) {
imageUrlString = [[myGlobals sharedInstance].avatarUrlDefault stringByAppendingString:@"/avatar.png"];
self.userProfileImageView.image = [imageCache getCachedImageFromMemory:imageUrlString];
}
[pool release];
}
的问题是,如果他们滚动的UITableView加载任何东西之前,图像获得积压,然后最终所有的图像加载它们闪烁或改变在当前的单元格上,直到它到达正确的单元格。我认为在每个单元格中创建一个NSThread实例并且仅仅取消-prepareForReuse中的线程会很好,但我似乎无法再次重用NSThread对象,关于如何解决这个问题的任何想法?