【问题标题】:Running C code in an Objective C (Cocoa) Thread (for iOS)在 Objective C (Cocoa) 线程中运行 C 代码(适用于 iOS)
【发布时间】:2011-06-20 14:44:50
【问题描述】:

首先,我是一个非常新的 Objective C/Cocoa iOS 开发者,但我之前写过 C/C++ 应用程序。

所以我设法在我的 iPhone 应用程序中运行 Rabbitmq-c (http://hg.rabbitmq.com/rabbitmq-c/) 客户端,我可以直接从我的应用程序连接到 Rabbitmq,甚至可以使用队列项.所以一切都很好。

现在我的问题是,我的 iPhone 应用程序需要使用 rabbitmq-c 库来轮询来自服务器的传入消息。可能会有一个几乎无限的while循环。

我必须把它带到一个新线程吗?理想情况下,我想将 rabbitmq-c 类包装为异步目标 C 类,并使用 NSNotification(或类似的东西)来通知我的 UI。我对创建一个新线程有点怀疑,因为我读到了诸如 Runloop 之类的东西可以在不使用额外线程的情况下解决很多问题。

对我来说最好的方法是什么?任何代码或方向示例都会有所帮助。请记住,我在这里处理的不是 Objective C 代码/Coca rabbitmq 库,我在我的 iPhone 应用程序中使用 C 代码。

谢谢

子组

【问题讨论】:

    标签: iphone objective-c c multithreading cocoa


    【解决方案1】:

    不要用你的服务器轮询阻塞主线程。

    由于操作永远不会结束,请为此服务器轮询创建您自己的线程和运行循环。您可以潜在地使用运行循环(每个线程都有一个)而不是无限的while。替代方案涉及定期生成线程。最简单的方法是只使用一个线程。

    一旦你有更新,从主线程发布通知(如果你选择 NSNotification)——UIKit 只能从主线程操作。

    对于示例,我将从与 NSRunLoop 和 CFRunLoop 相关的示例开始。

    祝你好运

    【讨论】:

      【解决方案2】:

      您还可以创建自定义委托来更新 UI 或与 UIKit 相关的内容。

      通知可能更容易编码,并提供多个对象可以观察一个通知的优势。对于委托,如果不修改委托对象,就无法完成这样的事情(而且很不寻常)。

      委托的一些优点:

      委托对象和委托之间的联系更加清晰,尤其是在强制实施委托的情况下。 如果必须从受委托者之间传递一种以上类型的消息,则委托可以通过为每条消息指定一个委托方法来使这一点更加清晰。

      【讨论】:

        【解决方案3】:

        或者其他方式是写方法来接收消息。该方法可以无限循环。

        以后你可以像这样把这个方法放在后台线程中。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多