我有以下代码用推文填充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;
}
上面的代码需要花费大量的时间才能获取头像。无论如何我可以使用块并在单独的线程上加载头像并使界面更快。
答案 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,可能更容易使用。