繁体   English   中英

如何返回目标C的主运行循环

[英]How to go back to main run loop of objective C

我使用从RedPark购买的串行电缆(iOS设备到RS232)进行第一个项目。 我已经通过发送和接收数据使它正常工作。(还不算太远。)我希望我的应用程序能够正常工作,因为iphone通过发送命令和外部设备对所需数据的答复来充当通信的主人。

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

我遇到了一个问题,它是RedPark提供的readByteAvaible(),是事件驱动的,因此我无法在viewDidLoad或其他方法中一起发送多个命令。 我尝试了不同的方法来获取我需要的所有软件包。 像多线程。 它们都不起作用。 从库常见问题解答中说,“必须先将其返回到运行循环,然后再处理它们”。

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

运行循环是事件循环的可可版本。 因此,这只是一堆事情。 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:安排在主运行循环上发生的事情,但performSelector:withObject:afterDelay:是已经安排了其他事情。 您可以传递0.0的延迟,以使其下一次发生,但也可以给已经安排的其他任何事件提供运行的机会。

RedPark的SDK仅在您交出电子邮件地址后才可用,因此我拒绝这样做。 您能给我们更多有关其配方的更多信息吗? 它是阻止,回调,委托还是其他?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM