1

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

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

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

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

4

1 回答 1

1

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

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

总的来说,如果你不考虑任何额外的想法,那么你的所有代码都将出现在主运行循环上,因为提供所有控件的 UIKit 只在主运行循环上工作。

所以,假设你有一个 UIButton 并且它被连接起来调用didPressButton:then:

- (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 仅在您交出您的电子邮件地址后才可用,因此我拒绝这样做;你能给我们更多关于它是如何制定的信息吗?它是阻塞、回调、委托还是其他什么?

于 2012-10-02T22:18:27.907 回答