gpt4 book ai didi

objective-c - 如何返回 Objective-C 的主运行循环

转载 作者:行者123 更新时间:2023-11-29 13:27:39 25 4
gpt4 key购买 nike

我在我的第一个项目中使用从 RedPark 购买的串行电缆(ios 设备到 RS232)。我已经通过发送和接收数据让它工作了。(还不算太远。)我希望我的应用程序如何工作是 iphone 通过发送命令和外部设备回复所需的数据在通信中充当主机。

很多时候,我需要同时请求多个数据包。

我遇到了 RedPark 提供的 readByteAvaible() 事件驱动的问题,所以我无法在 viewDidLoad 或其他方法中同时发送多个命令。我尝试了不同的方法来获取我需要的所有包。比如多线程。它们都不起作用。在图书馆常见问题解答中,它说“在处理这些之前,您必须返回到您的运行循环”。

我对 Objective-C 还是很陌生,仍然感到有点困惑。谁能告诉我如何实现这一目标?或者可能是关于 Objective-C 的主运行循环的一些信息?

最佳答案

运行循环是 Cocoa 版本的 event loop .所以这只是一系列要做的事情。 Objective-C 是动态的,因此列表往往是目标和选择器;这不像 Win32 或 Mac Classic Toolbox 等旧的纯静态运行时,您需要等待消息结构,然后根据消息类型输入一些精心设计的分支。

运行循环和线程具有一对一的关系,主运行循环是在主线程上运行的循环。

总的来说,如果您不加考虑,那么您的所有代码都将出现在主运行循环中,因为提供所有控件的 UIKit 仅在主运行循环中运行。

因此,假设您有一个 UIButton 并且它被连接以调用 didPressButton: 那么:

- (IBAction)didPressButton:(id)sender
{
// this code is running on the main run loop

NSLog(@"I'm executing on the main run loop");

// when this method ends, control will return to the run loop
}

您可能不想使用多线程,您可能只想在运行循环上进行调度。

您可以使用 performSelectorOnMainThread:从任何地方在主运行循环上安排一些事情的方法。如果你已经在主线程上,你可以使用 performSelector:withObject:afterDelay:安排在主运行循环上发生的事情,但只有在已经安排好其他事情之后。您可以传递 0.0 的延迟以让它接下来发生,但也可以让其他任何已经计划在接下来发生的事情有机会运行。

RedPark 的 SDK 只有在您交出您的电子邮件地址后才可用,所以我拒绝这样做;你能给我们更多关于它是如何制定的信息吗?是 block 、回调、委托(delegate)还是其他什么?

关于objective-c - 如何返回 Objective-C 的主运行循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12699056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com