2011-02-03 76 views
2

首先,我是一个非常新的Objective C/Cocoa iOS开发人员,但我之前编写过C/C++应用程序。在Objective C(Cocoa)线程中运行C代码(适用于iOS)

所以我设法在我的iPhone应用程序内的RabbitMQ-C(http://hg.rabbitmq.com/rabbitmq-c/)客户端,我可以直接连接从我的应用程序的RabbitMQ,甚至消耗队列项目。所以一切都很好。

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

我必须把这个交给新线程?理想情况下,我想换行的RabbitMQ-C类作为一个异步客观C级和使用NSNotification(或类似的东西)来通知我的UI。我是一个有点戒心创建一个新的线程,因为我读到像Runloop等东西可以解决很多问题,而无需使用额外的线程。

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

感谢

Subrat

回答

3

不会阻止你的服务器轮询主线程。

因为操作永不结束,请创建您自己的线程并为此服务器轮询运行循环。你可以使用运行循环(每个线程都有一个)而不是无限的while循环。这些替代品通常会产生线程。为此,使用一个线程是最简单的。

一旦你有一个更新,从主线程发布通知(如果你选择NSNotification) - UIKit只能从主线程运行。

对于样本,我会从与NSRunLoop和CFRunLoop有关的样本开始。

好运

0

您还可以创建自定义的代表用于更新UI,或与UIKit中的东西。

通知可能会更容易编码,并提供多个对象可以观察到一个通知的优势。对于代表来说,这样的事情不能在没有修改委托对象的情况下完成(并且是不寻常的)。

委派的一些优点:

委托对象和委托更清楚,特别是如果执行委托是强制性之间的连接。 如果不止一个类型的消息必须从委托传递给委托,委派可以通过指定每一个消息委托方法使之更清楚。

0

或者另一种方式是写方法来接收消息。这个方法可以有无限循环。

以后你可以把后台线程像这样的这种方法。

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

相关问题