UIImageView вообще не выполняет никакой загрузки.Вся загрузка выполняется [[UIImage alloc] initWithContentsOfFile:filePath]
, и ваш поток блокируется во время загрузки файла (поэтому загрузка уже завершена к моменту, когда вызов окончательно возвращается).
То, что вы хотите сделать, это нечтонапример:
- (void)loadImage:(NSString *)filePath {
[self performSelectorInBackground:@selector(loadImageInBackground:) withObject:filePath];
}
- (void)loadImageInBackground:(NSString *)filePath {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath];
[self performSelectorOnMainThread:@selector(didLoadImageInBackground:) withObject:image waitUntilDone:YES];
[image release];
[pool release];
}
- (void)didLoadImageInBackground:(UIImage *)image {
self.imageView.image = image;
}
Вы должны настроить self.imageView
для отображения изображения в низком разрешении, а затем позвонить loadImage:
, чтобы загрузить версию в высоком разрешении.
Обратите внимание, что если выВызывайте это повторно до того, как didLoadImageInBackground:
будет вызван из более ранних вызовов, вы можете вызвать переполнение памяти устройства.Или, возможно, изображение из первого вызова загружается намного дольше, чем изображение из второго вызова, и didLoadImageInBackground:
вызывается для второго изображения до того, как оно вызывается для первого.Решение этих проблем оставлено в качестве упражнения для читателя (или для другого вопроса).