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