Ios 在uitableview中一秒钟后加载数据。有没有其他方法可以消除这种延迟
这是在Objective C中处理数据和重新加载表的正确方法吗?如果是,那么在查看tableview上的数据时仍然会看到一些延迟。我有什么办法可以消除这种延误吗?顺便说一下,这是我故事板中的第二个屏幕。你做得很好下载后台线程上的数据并将其交给表视图,以便在主线程中重新加载数据,这就是您所需要做的一切。几乎可以肯定的是,在向表提供数据时,您自己的延迟(网络延迟和解析时间),而不是UITabvleView在处理重载数据调用时的延迟 执行此操作时应遵循的一些一般规则:Ios 在uitableview中一秒钟后加载数据。有没有其他方法可以消除这种延迟,ios,objective-c,uitableview,grand-central-dispatch,reload,Ios,Objective C,Uitableview,Grand Central Dispatch,Reload,这是在Objective C中处理数据和重新加载表的正确方法吗?如果是,那么在查看tableview上的数据时仍然会看到一些延迟。我有什么办法可以消除这种延误吗?顺便说一下,这是我故事板中的第二个屏幕。你做得很好下载后台线程上的数据并将其交给表视图,以便在主线程中重新加载数据,这就是您所需要做的一切。几乎可以肯定的是,在向表提供数据时,您自己的延迟(网络延迟和解析时间),而不是UITabvleView在处理重载数据调用时的延迟 执行此操作时应遵循的一些一般规则: 正在进行服务器调用时,在屏幕上显
cellForRowAtIndexPath:
方法中执行繁重的操作 NSURL *url=[NSURL URLWithString:string];
dispatch_queue_t backgroundQueue = dispatch_queue_create("com.example.workQueue", DISPATCH_QUEUE_SERIAL);
dispatch_async(backgroundQueue, ^{
NSData *data=[NSData dataWithContentsOfURL:url];
NSDictionary *json=[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
NSLog(@"%@",json);
marray=[NSMutableArray array];
for (NSDictionary *dict in json) {
}
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
});
你做得很好下载后台线程上的数据并将其交给表视图,以便在主线程中重新加载数据,这就是您所需要做的一切。几乎可以肯定的是,在向表提供数据时,您自己的延迟(网络延迟和解析时间),而不是UITabvleView在处理重载数据调用时的延迟 执行此操作时应遵循的一些一般规则:
cellForRowAtIndexPath:
方法中执行繁重的操作 NSURL *url=[NSURL URLWithString:string];
dispatch_queue_t backgroundQueue = dispatch_queue_create("com.example.workQueue", DISPATCH_QUEUE_SERIAL);
dispatch_async(backgroundQueue, ^{
NSData *data=[NSData dataWithContentsOfURL:url];
NSDictionary *json=[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
NSLog(@"%@",json);
marray=[NSMutableArray array];
for (NSDictionary *dict in json) {
}
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
});
你似乎一切都做对了。将您的队列更改为
DISPATCH\u queue\u CONCURRENT
?我真的看不出您可以避免延迟,因为您的tableView
正在等待数据在刷新之前进入,这可能需要一秒钟的时间。开发人员可能会使用“加载”循环向用户显示您正在检索的内容。在后台线程上运行网络任务,然后在主线程上调度UI刷新,这样做是正确的。@rb612…我尝试使用并发队列,但结果是一样的。您可以在上一个视图控制器中单击按钮,或者在用户转到此VC之前的某个点上,你可以得到数据,然后把它从你的第一个VC传给第二个VC。你似乎做的每件事都是对的。将您的队列更改为DISPATCH\u queue\u CONCURRENT
?我真的看不出您可以避免延迟,因为您的tableView
正在等待数据在刷新之前进入,这可能需要一秒钟的时间。开发人员可能会使用“加载”循环向用户显示您正在检索的内容。在后台线程上运行网络任务,然后在主线程上调度UI刷新,这样做是正确的。@rb612…我尝试使用并发队列,但结果是一样的。您可以在上一个视图控制器中单击按钮,或者在用户转到此VC之前的某个点上,您可以获取数据,然后将其从第一个VC传递到第二个VC。