2011-02-03 33 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];

相關問題