Three20 TTURLRequest同步缓存(使其异步或线程)?

时间:2011-03-30 19:22:17

标签: iphone three20 synchronous

我目前正在使用Three20库来实现iPhone项目的一些缓存。它对于加快我的表视图和页面加载是一个巨大的帮助,但是我遇到了一个小问题:

我已经将TTURLImageResponse子类化为调整大小/裁剪在缓存之前远程检索的图像,这样我每次从服务器/缓存中取回它们时都不必调整它们的大小。这非常有效并且图像加载速度非常快,但是当从Three20库中的缓存返回图像时,它们会同步返回。当从高速缓存返回10-20个图像请求时,这会导致明显的延迟。由于它们同步返回,它们阻止了我的UI线程,用户在看到从缓存中返回的图像之前等待了几秒钟。

我试图通过执行以下操作来操作操作:

- (void) setupImages
{   

    if(imageList != nil &&
       [imageList count] > 0)
    {
        [NSThread detachNewThreadSelector:@selector(fillImages) toTarget:self withObject:nil];
    }
    else
    {
        lblMessage.hidden = NO;
        lblMessage.text = @"There are no images. Try refreshing the current list.";
        lblTitle.text = @"";
        lblAuthor.text = @"";
    }
}

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

    int i=0;

    TTURLRequest *request;

    for (MyImage *imageObj in imageList)
    {
        NSString *imageUrl = [[[imageObj thumbnail_lg] image_url] absoluteString];
        if(imageUrl != nil)
        {           
            request = [TTURLRequest requestWithURL:imageUrl delegate:self];
            MyTTURLImageResponse *responseObj = [[[MyTTURLImageResponse alloc] init] autorelease];
            responseObj.index = i;

            request.cachePolicy = TTURLRequestCachePolicyDisk;
            request.response = responseObj;
            request.httpMethod = @"GET";
            [request send];

            i++;
        }
    }

    [pool release];
}

//When the fillImages selector is spawned on its own thread it does not callback to this method, therefore images are never loaded!!
- (void)requestDidFinishLoad:(TTURLRequest*)request 
{
    MyTTURLImageResponse *response = request.response;

    UIImage *loadedImage = response.image;
    int imageIndex = response.index;

    //this now happens as the image is cached :)
    //loadedImage = [loadedImage cropCenterAndScaleImageToSize:CGSizeMake(200, 200)];

    [myImageDisplay setImage:loadedImage forIndex:imageIndex];
}

然而,线程似乎不起作用(回调在主线程上......)。有没有人知道从异步中检索Three20 Cache的方法还是一种线程化Three20 TTURLRequest的方法,以便它至少在后台执行此操作?

0 个答案:

没有答案