Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何更快地下载新闻?_Ios_Objective C_Networking_Download - Fatal编程技术网

Ios 如何更快地下载新闻?

Ios 如何更快地下载新闻?,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

我有一个UITableViewController类,我用viewDidLoad方法下载代码。 那代码行吗?我对下载和显示内容不是很确定。因为显示新闻要花很多时间,而且表格滚动滞后。对不起,我不熟悉目标C

@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是你的一部分,它告诉你的视图控制器,“嘿,伙计!你所有的视图都在这里加载并准备好了。现在就开始吧。”。对这是你应该对你的观点采取行动的地方。不在数据上(除非它与视图直接相关)
在这里,我们的程序员被古老的it技术所启发,全球各地的iOS僧侣们的一种it实践形式是。所以你应该寻找那条路或者其他类似的路


一旦你有了这些分离的新闻,即数据,将完全从你的视图中分离出来,你就可以考虑更快地加载它的技术。比如在初始化应用程序时加载它,或者使用基于UI的延迟加载模式Pull来刷新或其他任何东西。

这本很棒的指南就是我所需要的。谢谢你的回答!这确实帮助我解决了问题

不要再想了。对于任何网络操作,请使用;对于任何图像web加载,请使用

在主线程上使用同步网络方法。-
stringWithContentsOfURL
这是第二大问题,因此有很多类似的问题。请更努力地搜索,查找关键字
UITableView异步“延迟加载”阻塞
为什么删除我接受的答案的可能重复抱歉,我把睡眠时间搞砸了