我有一个方法需要重复,直到满足某个条件。我使用的声明如下:
if(条件不符合){
再次运行此方法
} 别的{
}
但我不知道如何'再次运行此方法'。该方法称为runAction,因此我尝试了[self runAction],但它导致了运行时错误。
任何帮助表示感谢。
由于
答案 0 :(得分:3)
从内部调用方法是合法的,但如果调用无穷大,最终可能会出现堆栈溢出
- (void)runAction
{
[self runAction]; // Stack Overflow on this line ;)
}
答案 1 :(得分:2)
rpetrich给了你正确的答案,但是你考虑过使用循环吗?
while (condition is not met)
{
// logic that affects condition.
}
此外,如果'条件'依赖于外部力量(用户输入,下载等),那么这些都不正确并且您可能导致死锁 - 这是两个案例无法完成的原因,因为它们都在等待另一个。
如果是这种情况,你应该使用一个每隔XXX秒左右检查一次条件的计时器。最简单的方法是使用'performSelector'函数,该函数可用于在指定的时间后触发调用。
E.g。
-(void)someFunc
{
if(!condition)
{
[self performSelector:@selector(someFunc) withObject:nil afterDelay:1.0];
}
}