0

几天前我发现了 performSelectorInBackground:,我立即知道我的应用程序中有一个地方可以完美。

- (void)activate {

    waitForStartCode.text = @"Loading...";
    userNotifications.text = @"";
    timeRemaining.text = @"";
    [loadingNTP startAnimating];

    [self performSelectorInBackground:@selector(initializeEverything) withObject:nil];

}

当我的视图可见时调用它。之前,当使用 CocoaAsyncSocket 连接 NTP 时间服务器时,我的应用程序冻结,直到此过程完成。我真的想要一个带有动画 UIActivityIndi​​catorView 的加载视图。

initializeEverything -(void) 中的所有内容都可以正常工作,除了使用 CocoaAsyncSocket 的 NTP 初始化。

[NetworkClock sharedNetworkClock];

我得到一个:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

即使用我不熟练的眼睛,我也可以看出 CocoaAsyncSocket 并不意味着在后台运行。

有没有办法解决?

4

1 回答 1

1

CocoaAsyncSocket 支持异步网络。所以原则上你自己不需要后台线程来防止你的 UI 冻结:CocoaAsyncSocket 将为你处理后台通信。

我不能说您是否以“阻塞”方式使用框架,或者您正在做任何其他使您的 UI 阻塞的事情。但是,正如我所说,原则上您不需要自己管理后台线程。

于 2013-02-16T16:45:38.137 回答