0

为 OpenFlow 实现 AFGetImageOperation 的正确方法是什么。

AFGetImageOperation *getImageOperation = [[AFGetImageOperation alloc] initWithIndex:i viewController:self];
getImageOperation.imageURL = [NSURL URLWithString:aImage.imageURL];
[loadImagesOperationQueue addOperation:getImageOperation];
[getImageOperation release];

aImage.imageURL有请求的图像 URL 但不确定检索到的图像存储在哪里?

谢谢

4

1 回答 1

0

不缓存图像。它一次又一次地获取图像。

您可以使用以下方法缓存图像..

-(NSString *) md5String
{
    NSString *md5 = [Utilities md5String:[imageURL absoluteString]];

    return md5;
}


-(void) storeImage:(UIImage *)image AtPath:(NSString *)path
{
    NSFileManager *manager = [NSFileManager defaultManager];
    if([manager fileExistsAtPath:path])
    {
        [manager removeItemAtPath:path error:nil];
    }

    NSData *data = UIImagePNGRepresentation(image);
    [data writeToFile:path atomically:NO];
}



//TODO: //We need to cehck the expiry date as well..
//-(UIImage *) imageFromPath:(NSString *)path Expiry:()
-(UIImage *) loadImageFromPath:(NSString *)path
{
    UIImage *image = nil;

    NSFileManager *manager = [NSFileManager defaultManager];
    if([manager fileExistsAtPath:path])
    {
        image = [[[UIImage alloc] initWithContentsOfFile:path] autorelease];
    }

    return image;
}


-(NSString *) cachedImagePath
{
    NSString *md5 = [self md5String];
    NSString *cachedFilePath = [[Utilities applicationCacheDirectory] stringByAppendingPathComponent:md5];

    return cachedFilePath;
}

- (void)main {
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

    if (imageURL) {


        UIImage *photo = nil;

        NSString *cachedFilePath = [self cachedImagePath];
        UIImage *image = [self loadImageFromPath:cachedFilePath];

        if(image)
        {
            photo = image;
        }
        else
        {
            NSData *photoData = [NSData dataWithContentsOfURL:imageURL];
            photo = [UIImage imageWithData:photoData];
            [self storeImage:photo AtPath:cachedFilePath];
       }

        // Create a UIImage from the imageURL.

        if (photo) {
            [mainViewController performSelectorOnMainThread:@selector(imageDidLoad:) 
                                                 withObject:[NSArray arrayWithObjects:photo, [NSNumber numberWithInt:photoIndex], nil] 
                                              waitUntilDone:YES];
        }
    } else {
        // Load an image named photoIndex.jpg from our Resources.
        NSString *imageName = [[NSString alloc] initWithFormat:@"place_holder_bg.png", photoIndex];
        UIImage *theImage = [UIImage imageNamed:imageName];
        if (theImage) {
            [mainViewController performSelectorOnMainThread:@selector(imageDidLoad:) 
                                                 withObject:[NSArray arrayWithObjects:theImage, [NSNumber numberWithInt:photoIndex], nil] 
                                              waitUntilDone:YES];
        } else
            NSLog(@"Unable to find sample image: %@", imageName);
        [imageName release];
    }

    [pool release];
}
于 2012-03-30T05:38:58.530 回答