目标C - 使方法只调用一次

Kev*_*vin 3 cocoa objective-c

如果我有这个方法:

-(void) methodName
{
    action1;
    action2;
    [self methodName];
}
Run Code Online (Sandbox Code Playgroud)

我希望[self methodName]调用只进行一次,因此连续两次调用的方法.可以这样做吗?不确定我应该在哪些文档中查找.

每当调用方法'methodName'时,当action1和action2完成时,它应该再次调用自身,但只调用一次.在我编写的示例代码中完成的方式将永远进行(我猜).

Jac*_*kin 14

如果您只想在应用程序的整个生命周期中说一次,您可以使用dispatch_once,如下所示:

-(void)methodName
{
    action1;
    action2;

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
       [self methodName];
    });
}
Run Code Online (Sandbox Code Playgroud)

但是,如果你想要执行的方法action1action2每次调用两次,你有两个选择:

1)用另一种方法包装该功能:

- (void)executeMethod {
    [self methodName];
    [self methodName];
}
Run Code Online (Sandbox Code Playgroud)

2)更简单,将其包裹在一个循环中:

- (void)methodName {
   for(int i = 0; i < 2; ++i) {
      action1();
      action2();
   }

   //...
}
Run Code Online (Sandbox Code Playgroud)


MBy*_*ByD 6

您可以使用静态变量:

-(void) methodName
{
    static BOOL called = NO;
    if (called == NO)
    {
        called = YES;
        [self methodName];
    }
    else
    {
        called = NO;
    }
}
Run Code Online (Sandbox Code Playgroud)