在独立的iOS线程上获取Twitter头像

时间:2011-09-01 15:25:18

标签: ios asynchronous

我有以下代码用推文填充UITableView。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

NSString *uniqueIdentifier = @"UITableViewCell";

UITableViewCell *cell = nil;

if(!isNewSearch) {
 cell = [self.tweetsTable dequeueReusableCellWithIdentifier:uniqueIdentifier];

}

Tweet *tweet = [self.tweets objectAtIndex:[indexPath row]];

if(!cell)
{
    isNewSearch = NO;

    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:uniqueIdentifier] autorelease];

    [[cell textLabel] setTextColor:[UIColor whiteColor]];
    [[cell textLabel] setNumberOfLines:0];
    [[cell textLabel] setLineBreakMode:UILineBreakModeWordWrap];
    [[cell textLabel] setFont:[UIFont fontWithName:@"Futura-Medium" size:10]];

    // set custom properties 

}

[[cell textLabel] setText:[tweet text]];
 [[cell imageView] initWithImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:tweet.profileImageUrl]]]];


return cell;

}

上面的代码需要花费大量的时间才能获取头像。无论如何我可以使用块并在单独的线程上加载头像并使界面更快。

2 个答案:

答案 0 :(得分:1)

您需要考虑使用NSURLConnection进行异步调用及其委托方法,因为当前UIImage调用是在主线程中完成的,所以在Image下载之前您的UI不会响应

如果你不想潜入NSURLConnection有一个很棒的图书馆可以做类似于你试图用图像和细胞做的事情。它还提供了一些示例代码,您可以使用它们并插入其中:HJCache: iPhone cache library for asynchronous image loading and caching

答案 1 :(得分:0)

请勿将dataWithContentsOfURL:与远程网址一起使用。

一种方法是使用NSURLConnection(但不是sendSynchronousRequest:returningResponse:error:)异步下载文件,然后在下载完成后填写图像。还有许多第三方库,如ASIHTTPRequest,可能更容易使用。