У меня есть метод, который загружает изображения асинхронно.Если изображения связаны с массивом объектов (общий вариант использования в приложении, которое я создаю), я хочу их кэшировать.Идея в том, что я передаю индексный номер (на основе indexPath.row таблицы, которую я делаю путем), и я прячу изображение в статическом NSMutableArray, указанном на строке таблицы, с которой я работаюс.
Таким образом:
@implementation ImageDownloader
...
@synthesize cacheIndex;
static NSMutableArray *imageCache;
-(void)startDownloadWithImageView:(UIImageView *)imageView andImageURL:(NSURL *)url withCacheIndex:(NSInteger)index
{
self.theImageView = imageView;
self.cacheIndex = index;
NSLog(@"Called to download %@ for imageview %@", url, self.theImageView);
if ([imageCache objectAtIndex:index]) {
NSLog(@"We have this image cached--using that instead");
self.theImageView.image = [imageCache objectAtIndex:index];
return;
}
self.activeDownload = [NSMutableData data];
NSURLConnection *conn = [[NSURLConnection alloc]
initWithRequest:[NSURLRequest requestWithURL:url] delegate:self];
self.imageConnection = conn;
[conn release];
}
//build up the incoming data in self.activeDownload with calls to didReceiveData...
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"Finished downloading.");
UIImage *image = [[UIImage alloc] initWithData:self.activeDownload];
self.theImageView.image = image;
NSLog(@"Caching %@ for %d", self.theImageView.image, self.cacheIndex);
[imageCache insertObject:image atIndex:self.cacheIndex];
NSLog(@"Cache now has %d items", [imageCache count]);
[image release];
}
Мой индекс проходит нормально, я вижу это по выводу NSLog.Но даже после моего insertObject: atIndex: call, [imageCache count]
никогда не оставляет ноль.
Это мой первый набег на статические переменные, поэтому я предполагаю, что я делаю что-то не так.
(Приведенный выше код сильно обрезан, чтобы показывать только главное, что происходит, поэтому помните об этом, когда смотрите на него.)