如果我有这个方法:
-(void) methodName
{
action1;
action2;
[self methodName];
}
我希望 [self methodName] 调用只执行一次,因此该方法只连续调用两次。这可以做到吗?不确定我应该在文档中的哪个位置查找。
每当调用方法“methodName”时,当 action1 和 action2 完成时,它应该再次调用自身,但只调用一次。在我编写的示例代码中完成的方式将永远持续下去(我猜)。
如果我有这个方法:
-(void) methodName
{
action1;
action2;
[self methodName];
}
我希望 [self methodName] 调用只执行一次,因此该方法只连续调用两次。这可以做到吗?不确定我应该在文档中的哪个位置查找。
每当调用方法“methodName”时,当 action1 和 action2 完成时,它应该再次调用自身,但只调用一次。在我编写的示例代码中完成的方式将永远持续下去(我猜)。
如果您的意思是在应用程序的整个生命周期中只说一次,您可以使用dispatch_once
,如下所示:
-(void)methodName
{
action1;
action2;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
[self methodName];
});
}
但是,如果您打算执行该方法action1
并且action2
每次调用两次,那么您有两个选择:
1)将该功能包装在另一种方法中:
- (void)executeMethod {
[self methodName];
[self methodName];
}
2)更简单,将其包装在一个循环中:
- (void)methodName {
for(int i = 0; i < 2; ++i) {
action1();
action2();
}
//...
}
您可以使用静态变量:
-(void) methodName
{
static BOOL called = NO;
if (called == NO)
{
called = YES;
[self methodName];
}
else
{
called = NO;
}
}
最简单的做法是将其拆分为两种方法:
-(void) subMethodName
{
action1;
action2;
}
-(void) methodName
{
[self subMethodName];
[self subMethodName];
}
或者使用某种形式的循环。
(您在原始代码中拥有的是无限递归 - 通常不是一件好事。)
您需要对其应用一些逻辑。这可以使用 Bool 变量或简单的计数。
拿
int Count=0; //as a global variable.
现在只需修改您的方法如下
-(void) methodName
{
Count++;
action1;
action2;
if(Count==1)
[self methodName];
}