ユーザーがアプリをバックグラウンドに移動したときに、シリアルディスパッチキューを使用して一部のネットワークリクエストをシリアル化します。
- (void)applicationDidEnterBackground:(UIApplication *)application
{
dispatch_queue_t opQ = dispatch_queue_create("com.myapp.network", NULL);
dispatch_async(opQ, ^{
[self sendNetworkData1];
[self sendNetworkData2];
[self sendNetworkData3];
});
}
問題は、私が作成したこのキューで実行すると、想定されている5秒間でもアプリがアクティブのままにならないことです。
逆に、同じリクエストをキューの外に送信すると、約8秒間送信されます。しかし、アプリはその後クラッシュします。
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[self sendNetworkData1];
[self sendNetworkData2];
[self sendNetworkData3];
}
また、残りの1つをディスクに書き込んで、ユーザーが次にアプリを開いたときに送信できるようにします。
これを実装するための最良の方法は何ですか?