5

iOSアプリケーションを持っています。アプリケーションには、メインと設定の2つの異なるビューがあります。実際、アプリケーションは、メインビューで使用する前に、ライブラリとフレームワークをロードして初期化する必要があります。

この初期化をviewDidLoadメソッドに入れると、問題なく動作します。しかし、[設定]に移動してメインビューに戻ると、初期化が再開されます。これは私が望んでいることではなく、アプリケーションでメモリの問題が発生します。

アプリケーションの起動時に一度呼び出されるメソッドが必要です。何か案が?

編集:タブ付きビューに切り替えました。ビューを1回ロードします。これは別の解決策です。

4

4 に答える 4

28

コメントの1つに、このコードを入れたくないと述べapplication:didFinishLaunching、viewDidLoadに保持したいとします。このスニペットを使用して、最初に呼び出されたときにのみコードを実行できます。

static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    // code here
});

内側のブロックは1回だけ実行されます。ビューが再度ロードされた場合、ブロックは呼び出されません。このためのXcodeコードスニペットがありdispatch_once、エディターに入力を開始することでアクセスできることに注意してください。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

于 2012-04-04T07:00:47.190 に答える
7

これを使用してください:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

それはあなたのappdelegateクラスにあるべきです。

それが役に立てば幸い

于 2012-04-04T06:40:30.130 に答える
2

使用することもできます

+ [NSObject initialize]

その名前のクラスメソッドを定義すると、他のメッセージがそのクラスに送信される前に1回実行されます。

+ (void)initialize {
  // Put one-time initialization code here.
}

https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html#//apple_ref/occ/clm/NSObject/initialize

于 2012-06-06T22:30:58.950 に答える
0

アプリ全体でインスタンスが1つ(シングルトン)しかないことが保証されてAppDelegateいるオブジェクトの1つで、インスタンス変数/プロパティを宣言できます。 BOOL initialized;

次に、viewDidLoadのでUIViewController、コードが初期化されているかどうかを確認します。そうでない場合は、コードを実行して変数をtrueに設定します。

 if (!initialized) {
    // Code goes here
    initialized = true;
 }
于 2012-04-04T07:01:36.123 に答える