我有几个问题..首先,实现下面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];
答案 0 :(得分:1)
尝试从一种语言移植代码&另一个逐行构建的API是一场失败的战斗。
您需要从相对抽象的层面开始,阅读与您的目标平台相关的various excellent programming指南,然后以最适合该平台的方式解决您的问题。
(并不是说你犯了上述错误 - 只是确保其他人可能会这么做!)
特别是Concurrency Programming Guide可能具有高度适用性(假设具有Objective-C的工作知识)。
具体来说,你要避免的是产生大量的线程 - 没有必要,因为你有GCD和NSOperation - 以及任何类似的东西:
while(stillRunning) {
... do something
}
特别是,后一种结构暗示了一种民意调查结构。民意调查很糟糕;它吃CPU,电池,并且经常使应用程序响应性降低。 Mac OS X和iOS上的通用模型是设置某种处理程序 - 调度源,运行循环事件处理程序等等 - 然后仅在响应有响应的事件时使用CPU。