Ios 如何更快地下载新闻?
我有一个UITableViewController类,我用viewDidLoad方法下载代码。 那代码行吗?我对下载和显示内容不是很确定。因为显示新闻要花很多时间,而且表格滚动滞后。对不起,我不熟悉目标CIos 如何更快地下载新闻?,ios,objective-c,networking,download,Ios,Objective C,Networking,Download,我有一个UITableViewController类,我用viewDidLoad方法下载代码。 那代码行吗?我对下载和显示内容不是很确定。因为显示新闻要花很多时间,而且表格滚动滞后。对不起,我不熟悉目标C @implementation NewsViewController - (void)viewDidLoad { // _sidebarButton.tintColor = [UIColor colorWithWhite:0.96f alpha:0.2f]; _sidebar
@implementation NewsViewController
- (void)viewDidLoad
{
// _sidebarButton.tintColor = [UIColor colorWithWhite:0.96f alpha:0.2f];
_sidebarButton.target = self.revealViewController;
_sidebarButton.action = @selector(revealToggle:);
[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
[super viewDidLoad];
[self getJSON];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return currentCellsCount;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
CellForNews *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
id tempObject=[self.arrayOfNews objectAtIndex:indexPath.row];
cell.publishDate.text=tempObject[@"publish_date"];
NSData *data=[NSData dataWithContentsOfURL:[NSURL URLWithString:tempObject[@"img_path"]]];
cell.newsImage.image=[UIImage imageWithData:data];
cell.descriptionOfThenews.text=tempObject[@"body"];
cell.titleOfTheNews.text=tempObject[@"publish_title"];
return cell;
}
-(void)getJSON{
NSString *path=@"example.com";
NSURL *url=[NSURL URLWithString:path];
NSString *dataJSON=[NSString stringWithContentsOfURL:url
encoding:NSUTF8StringEncoding
error:Nil];
NSData *data=[dataJSON dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *rootDictionary=[NSJSONSerialization JSONObjectWithData:data
options:kNilOptions
error:nil];
NSDictionary *newsDict=[rootDictionary objectForKey:@"publications"];
id marker=[[NSObject alloc]init];
self.arrayOfNews=(NSMutableArray*)[newsDict objectsForKeys:[newsDict allKeys] notFoundMarker:marker];
currentCellsCount=[newsDict allKeys].count;
}
您使用的后台线程与NSOperation queue GCD中的任何一个一样 延迟加载是一个非常著名的例子,它对您所要求的内容非常有帮助 示例应用程序 因为显示新闻要花很多时间 您应该考虑预加载数据 而且表格滚动也很慢 这是因为您正在同步执行网络操作,这会阻止负责呈现UI元素的应用程序主线程。所以你应该发送你的请求 好吧,一旦你了解了基本知识。最好找一个能做更多事情的图书馆,比如 我有一个UITableViewController类,我用viewDidLoad方法下载代码。那代码行吗 我不能说这是不好的,但它仍然有效!但可能并不理想,这就是它落后的原因 所以,我可以自由地不回答你的问题,而是就如何更好地设计应用程序的逻辑给出建议吗? 如果是这样,请继续阅读 什么是viewDidLoad?
- viewDidLoad是你的一部分,它告诉你的视图控制器,“嘿,伙计!你所有的视图都在这里加载并准备好了。现在就开始吧。”。对这是你应该对你的观点采取行动的地方。不在数据上(除非它与视图直接相关)李>
一旦你有了这些分离的新闻,即数据,将完全从你的视图中分离出来,你就可以考虑更快地加载它的技术。比如在初始化应用程序时加载它,或者使用基于UI的延迟加载模式Pull来刷新或其他任何东西。这本很棒的指南就是我所需要的。谢谢你的回答!这确实帮助我解决了问题 不要再想了。对于任何网络操作,请使用;对于任何图像web加载,请使用在主线程上使用同步网络方法。-
stringWithContentsOfURL
这是第二大问题,因此有很多类似的问题。请更努力地搜索,查找关键字UITableView异步“延迟加载”阻塞
为什么删除我接受的答案的可能重复抱歉,我把睡眠时间搞砸了