フィールドを持つtableViewがありUIImageView
ます。セッターsetupCell
から呼び出されるメソッドで設定します。set_book
セッターは から呼び出されtableView:willDisplayCell:forRowAtIndexPath:
ます。setupCell の一部を次に示します。
dispatch_queue_t downloadImage = dispatch_queue_create("Download Image", NULL);
dispatch_async(downloadImage, ^{
NSString* key = [_book.internalID stringByAppendingPathExtension:@"thumb"];
UIImage* thumb = [[[LTImagesCacheController shared] cache] objectForKey:key];
if (thumb == nil)
{
dispatch_async(dispatch_get_main_queue(), ^{
_bookImageView.layer.borderWidth = 0.0;
_bookImageView.image = [[LTImageProvider sharedImagesProvider] imageForName:@"DefaultBook.png" cache:YES];
});
NSString* imageName = [[LTImagesCacheController cacheDir] stringByAppendingPathComponent:key];
if([[NSFileManager defaultManager] fileExistsAtPath:imageName])
{
NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys:[NSDate date], NSFileModificationDate, nil];
[[NSFileManager defaultManager] setAttributes:attr ofItemAtPath:imageName error:nil];
thumb = [UIImage imageWithContentsOfFile:imageName];
[[[LTImagesCacheController shared] cache] setObject:thumb forKey:key];
}
else
{
NSString* url = _book.coverURL;
thumb = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url]]];
if (thumb != nil)
[[[LTImagesCacheController shared] cache] setObject:thumb forKey:key];
}
}
if (thumb != nil)
{
dispatch_async(dispatch_get_main_queue(), ^{
_bookImageView.layer.borderWidth = 1.0;
_bookImageView.image = thumb;
});
}
});
dispatch_release(downloadImage);
アプリを実行すると、UI が 1 秒未満の短い時間フリーズすることがあります。私は何を間違っていますか?DefaultBook.pngをデフォルトに設定したいので、_book.coverURLの画像があれば設定します。100 ~ 200 個のセルがあり、サムネイル画像のサイズは 15 ~ 30 KB です。