我有一个循环很多的脚本。有时我需要手动停止它。它在applescript编辑器中运行正常,因为我可以点击停止,但如果这将是一个在xcode中制作的独立应用程序,那么我将如何创建一个停止按钮?我听说过有关线程的事情,但我还没理解。
让我说我的代码是:
on buttonClicked_(sender)
repeat
say "help"
end repeat
end buttonClicked_
单击按钮将是一个ui按钮,显示“run”
答案 0 :(得分:1)
我不知道ApplescriptObjC,但是这里是如何在objective-c中完成的。我相信你可以弄清楚如何转换它。
线程化的想法是你的程序在主线程上运行。当您进入重复循环时,将占用所有应用程序资源,从而阻止主线程,因此在退出重复循环之前,您无法执行任何其他操作。因此,在后台线程上运行重复循环,因此主线程可以自由处理其他任务,例如按下按钮。
例如,假设您的界面上有一个按钮,并且代码中设置了BOOL变量。按下每个按钮,BOOL变为YES / NO。这是一个按钮方法。请注意,我们使用“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];
}
}
祝你好运。