アプリ起動時の時間がかかる処理

アプリが起動時たときに例えばCoreDataのマイグレーションをしたり、データの整合性がとれているかをチェックしたり、更にはファイルをDocumentフォルダにインストールしたりすることがあります。 しかし、これらの処理には時間制限があり、アプリ起動時に20秒以上かかってしまうと強制終了となってしまいます。 つまり、これらの処理をするにはアプリ起動後にやる必要があります。 ■アプリ起動後に重い処理をする方法(例) AppDelegateの中で関数を定義し、

1
-(void)update{ //重い処理 }

application:didFinishLaunchingWithOptions:の所であとで実行すると予約をする

1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ... // いろいろな処理 [self performSelector:@selector(update) withObject:nil afterDelay:0.1]; }

このようにやると、起動が成功したあとに思い処理をすることができます。 application:didFinishLaunchingWithOptions:の所で直接重い処理をしてしまうと 起動が完了していないため、そのまま20秒制限にかかるので気をつけてください。 思い処理をしている間はユーザーに明示的に表したほうがいいので、モーダルビューを出したりしたほうがより良いようです。 参考:Cocoaの日々: CoreData - マイグレーションを考慮した CoreDataManager パターン