2

BOOL で何かのステータスを示したいとしましょう。次に、再帰関数を使用して特定の文字列を作成するクラス メソッドを呼び出します。この BOOL をクラスメソッドの外に保持して、再帰の外でステータスを変更できるようにする方法はありますか? この質問を明確にするのは難しいと思いますが、私が尋ねようとしていることを皆さんが知っていることを願っています:/

4

2 に答える 2

2

2 つの基本的なアプローチがあります。


1) 複数のファイルに表示:

MONGlobalBOOL.h

extern BOOL MONGlobalBOOL;

MONGlobalBOOL.m

BOOL MONGlobalBOOL = NO;

2) 1 つのファイルに表示:

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 に答える