gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:52:21 25 4
gpt4 key购买 nike

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

假设我的代码是:

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

单击的按钮将是一个显示“运行”的 ui 按钮

最佳答案

我不知道 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];
}
}

祝你好运。

关于xcode - 如何在 ApplescriptObjC/xcode 中创建停止按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22274279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com