目标C,关于线程的问题

时间:2011-03-15 19:18:09

标签: objective-c

我有几个问题..首先,实现下面java代码中显示的内部类的最佳方法是什么? (在Java中实现类似接口的协议)

 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中使用了类似的东西来生成一个新线程。在java代码中,内部类有一个while循环,只要isActive,boolean类型变量为true,它就会永远运行。我可以设置一个带有布尔类型变量的while循环,如Java代码中所示,只要布尔变量在目标C中为真,就可以永久地运行循环吗?我应该使用CFRunLoop吗?

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

1 个答案:

答案 0 :(得分:1)

尝试从一种语言移植代码&另一个逐行构建的API是一场失败的战斗。

您需要从相对抽象的层面开始,阅读与您的目标平台相关的various excellent programming指南,然后以最适合该平台的方式解决您的问题。

(并不是说你犯了上述错误 - 只是确保其他人可能会这么做!)

特别是Concurrency Programming Guide可能具有高度适用性(假设具有Objective-C的工作知识)。

具体来说,你要避免的是产生大量的线程 - 没有必要,因为你有GCD和NSOperation - 以及任何类似的东西:

while(stillRunning) {
    ... do something
}

特别是,后一种结构暗示了一种民意调查结构。民意调查很糟糕;它吃CPU,电池,并且经常使应用程序响应性降低。 Mac OS X和iOS上的通用模型是设置某种处理程序 - 调度源,运行循环事件处理程序等等 - 然后仅在响应有响应的事件时使用CPU。