0

私が見ている SDK のデモ アプリには、アプリケーション デリゲートとルート ビュー コントローラーのグローバル変数があります。

これは前に見たことがありませんが、利点は明らかです。再入力に関するショートカット

AViewController* rootVC = [[UIApplication sharedApplication]delegate] window] rootViewController];

ルート ビュー コントローラーを取得するだけでも大きな助けになるようです。

しかしもちろん、一見大きな利点には、常に同等の欠点が伴います。では、アプリ デリゲートとルート ビュー コントローラー用に AppDelegate.m で常にグローバル変数を作成する必要がないのはなぜでしょうか? リソースを浪費したり、セキュリティを侵害したりしませんか?

4

2 に答える 2

1

これは、コードの保守が不可能または保守が困難になるため、悪い習慣です。

  • アプリケーションの 2 つの部分が同じグローバル変数を変更しようとするため、競合状態は非常に簡単に発生します。特定の順序で処理が行われることを確認する必要があります。
  • アプリケーションの別の部分によって値が変更されるため、プログラム ロジックが混乱することがあります。特定の値を変更すると、その変数を使用している他のすべてのものにどのように影響し、どのような状態になるかを常に考える必要があります。

  • グローバル オブジェクトへの参照を渡すか
    、親コントローラーを参照して参照を取得する必要があります。これにより、コードは非常に依存性が高くなり、値が渡されてスタンドアロンになるように設計されたコードほど堅牢ではなくなります。

これらのポイントは非常に一般化されていますが、少なくとも、ほとんどの人がグローバル スコープを避け、代わりに分離設計を好む理由を示す必要があります。

于 2013-06-12T21:58:41.067 に答える