Привет, есть проблема с тем, что загрузка изображений (1024x1024), кэшированных на диске в UIScrollView, занимает некоторое время (просто отстает, но раздражает) для загрузки в память.при использовании изображений размером 668px × 445px допускается отставание.Я пытался загрузить данные, используя потоки тот же результат, когда я использую dispatch_async
Любой иде, как улучшить производительность при загрузке данных асинхронно?
-(void)setupImageView:(BMPhoto *)_photo {
methodStart = [[NSDate date] retain];
if ([[photo imageUrl] isEqualToString:[_photo imageUrl]])
return;
photo = _photo;
[imageView removeFromSuperview];
[imageView release];
imageView = nil;
self.zoomScale = 1.0;
BMCache *cache = [BMCache sharedCache];
if ([cache isFileCached:[photo imageUrl]]) {
[NSThread detachNewThreadSelector:@selector(loadImageFromCache:) toTarget:self withObject:[photo imageUrl]];
} else {
[NSThread detachNewThreadSelector:@selector(loadImageFrom:) toTarget:self withObject:[photo imageUrl]];
}
}
-(void)loadImageFromCache:(NSString *)url{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
UIImage *image = [UIImage imageWithData:[[BMCache sharedCache] getCachedRemoteFile:url]];
[self performSelectorOnMainThread:@selector(displayImage:) withObject:image waitUntilDone:NO];
[pool release];
}
-(void)loadImageFrom:(NSString *)url{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSData* imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[photo imageUrl]]];
[[BMCache sharedCache] addRemoteFileToCache:url withData:imageData];
UIImage* image = [[[UIImage alloc] initWithData:imageData] autorelease];
[imageData release];
[self performSelectorOnMainThread:@selector(displayImage:) withObject:image waitUntilDone:NO];
[pool release];
}
- (void)displayImage:(UIImage *)image {
NSDate *methodFinish1 = [NSDate date];
NSTimeInterval executionTime1 = [methodFinish1 timeIntervalSinceDate:methodStart];
NSLog(@"Thread Done time: %f", executionTime1);
if (image) {
//imageView.image = nil;
imageView = [[BMPhotoViewImageView alloc] initWithImage:image];
[self addSubview:imageView];
self.contentSize = [image size];
[self setMaxMinZoomScalesForCurrentBounds];
self.zoomScale = self.minimumZoomScale;
NSTimeInterval executionTime2 = [[NSDate date] timeIntervalSinceDate:methodFinish1];
NSLog(@"Load image time time: %f", executionTime2);
NSDate *methodFinish = [NSDate date];
NSTimeInterval executionTime = [methodFinish timeIntervalSinceDate:methodStart];
NSLog(@"Total time: %f", executionTime);
NSLog(@"-------------------------------------------");
}
}
Thread Done время: 0,015229 Время загрузки изображения время: 0,009824
Общее время: 0,028263
Время выполнения нити: 0,025037 Время загрузки изображения: 0,005314
Общее время: 0,035781
Время выполнения нити: 0,026063Время загрузки изображения: 0,004379
Общее время: 0,033177