2011-03-15 100 views
0

我有幾個問題。首先,實現下面的java代碼中顯示的內部類的最佳方法是什麼? (實現像Java中的接口協議)Objective C,關於線程的問題

public class MembershipControl { 
     public MembershipControl(){ 
      //do something here... 
      sendMessage sendMsgThread = new SendMessageThread(); 
      Thread sendeMsgThreadInst = new Thread(sendMsgThread); 
      sendMsgThreadInst.start(); 
     } 

     public class sendMessageThread implements Runnable { 
     public void run() { 
      while (isActive) { 
       //do something here 
      } 
     } 
} 

而且,你們可能注意到了,內部類這種情況下,將在一個單獨的線程中運行。 所以我有一個Java代碼這樣

sendMessage sendMsgThread = new SendMessageThread(); 
Thread sendeMsgThreadInst = new Thread(sendMsgThread); 
sendMsgThreadInst.start(); 

我在Objective C中使用這樣的事情來生成一個新的thread..In java代碼構造內部,內部類有一個while循環,它只要isActive,布爾類型變量,就會永遠運行。我可以使用Java代碼中顯示的布爾類型變量來設置一個while循環,只要布爾變量在目標C中爲true,就可以永久運行循環。我應該使用CFRunLoop嗎?

[NSThread detachNewThreadSelector:@selector(a method here:) toTarget:self withObject: an object to be passed]; 

回答

1

試圖端口代碼從一種語言& API到另一行由行,構建逐構建體,是一個失敗的戰鬥。

您需要從比較抽象的層面開始,通過與您的目標平臺相關的指南進行閱讀,然後以最適合該平臺的任何方式解決您的問題。

(不是說你都使得上述的錯誤 - !只是確保其他人可能會讀這不)

尤其是Concurrency Programming Guide很可能將是非常適用的(假設工作Objective-C的知識)。

具體來說,你想要什麼,以避免被大量產卵線程 - 沒有必要,因爲你有GCD和替代的NSOperation - 以及任何類似:

while(stillRunning) { 
    ... do something 
} 

尤其是後者結構暗示了一個輪詢結構。輪詢很糟糕;它吃CPU,電池,並經常使應用程序的響應速度較慢。 Mac OS X和iOS上的通用模型是設置某種處理程序 - 調度源,運行循環事件處理程序等等 - 然後僅在響應值得響應的事件時才使用CPU。