如何在ApplescriptObjC/xcode中创建停止按钮?

如何在ApplescriptObjC/xcode中创建停止按钮?,xcode,cocoa,applescript,Xcode,Cocoa,Applescript,我有一个经常循环的脚本。有时我需要手动停止它。它在applescript编辑器中运行良好,因为我可以直接点击停止按钮,但如果这是一个用xcode制作的独立应用程序,那么如何创建停止按钮呢?我听说过一些关于线程的事情,但我还不明白 假设我的代码是: on buttonClicked_(sender) repeat say "help" end repeat end buttonClicked_ 点击的按钮将是一个ui按钮,上面写着“运行”我不知道Apples

我有一个经常循环的脚本。有时我需要手动停止它。它在applescript编辑器中运行良好,因为我可以直接点击停止按钮,但如果这是一个用xcode制作的独立应用程序,那么如何创建停止按钮呢?我听说过一些关于线程的事情,但我还不明白

假设我的代码是:

on buttonClicked_(sender)
   repeat        
     say "help"
   end repeat
end buttonClicked_

点击的按钮将是一个ui按钮,上面写着“运行”

我不知道ApplescriptObjC,但下面是如何在objective-c中实现它。我相信你能想出如何转换它

线程的概念是程序在主线程上运行。当您进入重复循环时,它将占用您所有的应用程序资源,从而阻塞主线程,因此在退出重复循环之前,您无法执行任何其他操作。因此,在后台线程上运行repeat循环,这样主线程就可以自由地处理其他任务,比如按下按钮

例如,假设界面上有一个按钮,代码中有一个BOOL变量设置。每按一次按钮,布尔值都变为是/否。这里有一个按钮方法。注意,我们使用“detachNewThreadSelector”在后台线程上运行重复循环

-(IBAction)buttonPress:(id)sender {
   if (theBool == YES) {
      theBool = NO;
      [sender setTitle:@"Start"];
   } else {
      theBool = YES;
      [sender setTitle:@"Stop"];
   }
   [NSThread detachNewThreadSelector:@selector(theMethod) toTarget:self withObject:nil];
}
下面是您的“背景线程”方法的外观。因为我不知道您是否在使用ARC,所以它包含一个自动释放池,用于处理释放内存的问题。主线程自动有一个线程,但由于它位于后台线程上,我们必须创建自己的线程

-(void)theMethod {
   if (theBool == YES) {
      NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
      repeat
         if (theBool == NO) {
            exit repeat
         }
         say "help"
      end repeat
      [pool drain];
   }
}
祝你好运