Ios 用户界面更新延迟

Ios 用户界面更新延迟,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,我遇到过这样的情况: 我从API获取数据,这些数据很快就会出来。当我把它们推到nslog中时,一旦我请求,它们就会出现在那里。之后,我解析它们(来自JSON),并尝试在UILabel或UIImageView等控件中进行设置(对于图像)。我想我检查了数据推送到最后一点的时间延迟-我的意思是我试图在方法中获取NSLog,在那里获取数据,在哪里解析等等,最后在UILabel子类中的方法setText中 有什么问题吗?NSLogs中的内容很快就会出现,但UI中的内容会在。。。10-20秒!!原因可能是什

我遇到过这样的情况: 我从API获取数据,这些数据很快就会出来。当我把它们推到nslog中时,一旦我请求,它们就会出现在那里。之后,我解析它们(来自JSON),并尝试在UILabel或UIImageView等控件中进行设置(对于图像)。我想我检查了数据推送到最后一点的时间延迟-我的意思是我试图在方法中获取NSLog,在那里获取数据,在哪里解析等等,最后在UILabel子类中的方法setText中

有什么问题吗?NSLogs中的内容很快就会出现,但UI中的内容会在。。。10-20秒!!原因可能是什么

一段示范代码

{
[[contentView movieTitle] setText:movieTitle];
[[contentView movieYear] setText:movieYear];
[[contentView movieGenres] setText:movieGenres];
[[contentView movieDuration] setText:movieTime];
[[contentView movieDescription] setText:movieDescription];
[[contentView movieStarringName] setText:movieStarring];
[[contentView movieDirectorName] setText:movieDirector];

NSLog(@"--- %@", [contentView movieTitle].text);
}
这个NSLog只需一秒钟,但UI中的[contentView movieTitle]会在10-20秒后自行改变

我异步请求数据。
所有属性,如contentView或movieTitle、movieGenres等,都是(非原子的,保留)。

您可能在后台线程中进行UI更新(从Web服务获取返回,或解析JSON)。为了及时更新您的UI(并且不可能使应用程序崩溃),请在主线程中进行更新。这可以通过几种方式实现。最简单的方法(至少对我来说)是调用
dispatch\u async

    dispatch_async(dispatch_get_main_queue(), ^{
        [[contentView movieTitle] setText:movieTitle];
        [[contentView movieYear] setText:movieYear];
        [[contentView movieGenres] setText:movieGenres];
        [[contentView movieDuration] setText:movieTime];
        [[contentView movieDescription] setText:movieDescription];
        [[contentView movieStarringName] setText:movieStarring];
        [[contentView movieDirectorName] setText:movieDirector];
   });

好的,我找到了一个解决方案,多亏了


我没有创建新队列,而是从mainQueue获取引用。

这段代码是否在后台线程上运行?这可能会在检索和解析数据时阻塞您的UI。最好的方法是将您的队列保留在主线程之外,但当您想要更新用户界面时,请回调主线程。