2

假设我想要一个 BOOL 来指示某物的状态。然后我调用一个使用递归函数构造某个字符串的类方法。无论如何要将此 BOOL 保留在类方法之外,以便它的状态可以在递归之外更改?我很难清楚地问这个问题,但我希望你们知道我想问什么:/

4

2 回答 2

2

有两种原始方法:


1)对多个文件可见:

MONGlobalBOOL.h

extern BOOL MONGlobalBOOL;

MONGlobalBOOL.m

BOOL MONGlobalBOOL = NO;

2)对一个文件可见:

MONGlobalBOOL.m

static BOOL MONGlobalBOOL = NO;

您不希望在标题中使用它,因为这只会为每次翻译发出变量的副本。


正在使用:

+ (void)method
{
  if (MONGlobalBOOL) {
    ...
  }
}

谨慎的全局可变数据经常衰减为邪恶的东西。您可以通过在堆栈上创建局部变量来解决您的确切问题。

于 2012-04-11T06:37:22.340 回答
1

就语言支持而言,可以在 C 中完成的任何事情都可以在 Objective C 中完成。所以您可能只想使用静态变量:

static BOOL globalFlag

当然,如果您只想在递归方法中引用变量,例如您想从方法的更深层次递归中向调用方法发送标志,那么您可能会更好地通过引用传递变量:

- (void)someMethodWithRecursionFlag:(BOOL *)recursionFlag;

然后在需要时通过引用进行设置:

*recursionFlag = YES;

并在您感兴趣时阅读它:

[self someMethodWithRecursionFlag:recursionFlag];
if (*recursionFlag)
    [self doSomethingInteresting];
于 2012-04-11T06:18:43.547 回答