【发布时间】:2009-03-27 23:59:42
【问题描述】:
我有一个方法需要重复,直到满足某个条件。我正在使用如下语句:
如果(条件不满足){
再次运行此方法
} 否则 {
}
但我不知道如何“再次运行此方法”。该方法称为runAction,所以我尝试了[self runAction],但它导致了运行时错误。
任何帮助表示赞赏。
谢谢
【问题讨论】:
标签: iphone objective-c
我有一个方法需要重复,直到满足某个条件。我正在使用如下语句:
如果(条件不满足){
再次运行此方法
} 否则 {
}
但我不知道如何“再次运行此方法”。该方法称为runAction,所以我尝试了[self runAction],但它导致了运行时错误。
任何帮助表示赞赏。
谢谢
【问题讨论】:
标签: iphone objective-c
从内部调用方法是合法的,但如果调用无穷大,可能会导致堆栈溢出
- (void)runAction
{
[self runAction]; // Stack Overflow on this line ;)
}
【讨论】:
rpetrich 给了你正确的答案,但你是否考虑过使用循环来代替?
while (condition is not met)
{
// logic that affects condition.
}
此外,如果“条件”取决于外部力量(用户输入、下载等),那么这些都不正确,您可能会导致死锁 - 这是两个案例无法完成的地方,因为它们都在等待另一个。
如果是这种情况,您应该使用每 XXX 秒左右检查一次条件的计时器。最简单的方法是使用 'performSelector' 函数,该函数可用于在指定时间后触发调用。
例如
-(void)someFunc
{
if(!condition)
{
[self performSelector:@selector(someFunc) withObject:nil afterDelay:1.0];
}
}
【讨论】: