0

ViewControllerViewDidLoadのデリゲート オブジェクトを初期化しましたが、再度ロードすると、値が再度初期化されます。

getObjectandを使用してアクセスしたいデリゲートオブジェクトに、ある種の配列を保存していますsetObjectViewDidLoadデリゲート オブジェクトが呼び出されるたびに再初期化されないようにするにはどうすればよいですか?

4

4 に答える 4

1

この戦略を検討しましたか:

  • アプリが起動された後、その特定のオブジェクトが初期化されて使用される前に、nil に設定します。
  • アプリが初めてそれを使用しようとしている場合は、まだ nil かどうかを確認し (初めてなのでそうすべきです)、初期化して使用します。
  • アプリの残りのライフ サイクルでは、アプリが再び viewDidLoad メソッドを実行するたびに、そのオブジェクトが nil かどうかを常に確認します (この時点で nil であってはなりません)。これにより、アプリが既に初期化されているオブジェクトを初期化しようとする時間と労力を節約できます。

ただし、この戦略を使用する場合は、特定のオブジェクトの値がアプリのライフ サイクルを通じて同じままである必要があることに注意する必要があります。それ以外の場合は機能しません。

于 2011-02-07T08:54:03.907 に答える
0

物事が一度だけ行われる場所が必要な場合、それは通常、どこかのシングルトンにあります-一度作成され、どこからでも参照されるオブジェクトです。

AppDelegate は、無料で入手できるデフォルトのシングルトンです。しかし、しばらくして AppDelegate が多すぎると判断した場合は、カスタム データを入れる別の Singleton オブジェクトを作成することをお勧めします。

探している用語がわかったので、シングルトンの作成方法を示す多くの例があります。

于 2011-02-07T09:29:44.137 に答える
0

viewDidLoad で UI 要素のみを初期化する必要があります。それ以外はすべてコンストラクターで初期化する必要があります (initWith...)

于 2011-02-07T08:41:17.207 に答える
0

他の誰もが言っているように、おそらくシングルトン オブジェクトが必要です。これを行う最も簡単な方法は次のとおりです。

// interface

@interface MyViewController
{ ... }

+(DelegateType*) theDelegate;

...

@end

// implementation

@implementation MyViewController

+(DelegateType*) theDelegate
{
    static DelegateType* theDelegate = nil;

    if (theDelegate == nil)
    {
        theDelegate = [[DelegateType alloc] init];
    }
    return theDelegate;
}

@end

// To use it 

    [foo setDelegate: [MyViewController theDelegate]];
于 2011-02-07T10:19:58.900 に答える