ios performSelector:withObject:afterDelay: in viewDidLoad 冻结视图推送

Posted

技术标签:

【中文标题】ios performSelector:withObject:afterDelay: in viewDidLoad 冻结视图推送【英文标题】:ios performSelector:withObject:afterDelay: in viewDidLoad freeze view pushed 【发布时间】:2012-10-04 10:53:14 【问题描述】:

我将视图控制器推入导航

在 viewDidLoad 方法中,我把这个方法放在最后一行:

[self performSelector:@selector(startLoadAndParseXML) withObject:nil afterDelay:0.];

像往常一样,在我的应用程序中的其他视图控制器中,视图控制器被推送,然后方法 startLoadAndParseXML 运行,并且应用程序没有被冻结。但是只有一个视图控制器,我不知道为什么有时应用程序会冻结,并且只有在方法 startLoadAndParseXML 完成后才会推送视图。

谁能解释一下?谢谢你

【问题讨论】:

宁可在后台执行那个糟糕的选择器,对吧?我很惊讶这能奏效。 是的,它在当前线程上执行 【参考方案1】:

performSelectorWithObject:afterDelay: 在当前运行循环中启动选择器,而不是在后台线程中,因此如果您从主线程调用它,网络操作将冻结 UI,

【讨论】:

嗨,其他类的相同网络操作不会冻结应用程序。我的应用程序在许多视图控制器上具有相同的 startLoadAndParseXML 操作,并且冻结只发生在一个类中。我认为是我的错,但我找不到。

以上是关于ios performSelector:withObject:afterDelay: in viewDidLoad 冻结视图推送的主要内容,如果未能解决你的问题,请参考以下文章

IO复用阻塞IO非阻塞IO同步IO异步IO

四种IO模型‘阻塞IO/非阻塞IO/信号驱动IO/异步IO‘

5种IO模型阻塞IO和非阻塞IO同步IO和异步IO

网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

同步IO异步IO阻塞IO非阻塞IO之间的联系与区别

同步IO异步IO阻塞IO非阻塞IO之间的联系与区别