我想知道如何从后台功能中停止另一个功能 另外,我必须排出NSAutoreleasePool,但我不知道该怎么做 我认为如果我不释放游泳池,这个应用程序有时会冻结。
property i : 0
property myLabel : missing value
on myStartButtonHandler_(sender)
my performSelectorInBackground_withObject_("start", missing value) -- This code prevents "Stop" Button from freezing.
end myStartButtonHandler_
on myStopButtonHandler_(sender)
-- I want to stop start() function and drain AutoreleasePool!
-- I don't want to use "quit me" because I want to stop only start() function.
end myStopButtonHandler_
on start()
repeat
set i to i + 1
myLabel's setIntegerValue_(i)
delay 1
end repeat
end start
您可以从这里下载源代码 - > https://dl.dropboxusercontent.com/u/97497395/test2.zip
为了您的信息,我使用的是Xcode 4.6.3。
的修改
我的脚本有delay 300
命令,所以我无法通过检查变量的值来停止该函数。抱歉。
的修改
我设想了在延迟命令时停止功能的想法。
on start()
repeat 5 times
if i = 1 then
error -128
else
delay 60
end repeat
end start
on myStopButtonHandler_(sender)
set i to 1
end myStopButtonHandler_
我可以在60秒内停止该功能,但是一按下停止按钮就无法停止。所以,我还在等你的回答。
答案 0 :(得分:0)
停止该功能的一种简单方法是拥有一个变量。检查变量的值。例如,如果变量为真,那么您可以退出重复循环并排空自动释放池。我现在正在跑步,所以没时间编写代码。祝你好运。
编辑 :如果您使用NSTimer来触发处理程序,而不是重复循环,那么您可以使计时器无效以阻止它运行处理程序。我使用它来使计时器无效,因为你应该在使计时器失效之前检查计时器是否有效...如果你使一个无效的计时器失效,它将会崩溃。
-(void)deleteMyTimer {
if ([myTimer isValid]) {
[myTimer invalidate]
myTimer = nil;
}
}