35
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

アプリがバックグラウンドに回ったら処理を中断する

Posted at

ご存知の様に,iOSのアプリには「終了」を明示的に処理する方法がありません.ホームボタンをダブルクリックして,終了させる事は可能ですが一々そんな操作をするユーザーがいるとは思えません.

アプリの(擬似的な)終了はホームボタンを押す事ですが,この時アプリはバックグラウンドに回ります.

その際に通信を行う様なアプリだと,きちんと通信を停止しておかないとバックグラウンドでも通信をしてパケットとバッテリーを消費します.

その様な場合にはAppDelegate.hにアプリ自体(正確にはViewController)を格納する変数を定義して,メソッドを用意します.

Objc
@property (nonatomic) ViewController* delegate;

-(void) setDelegateView:(UIViewController*)delegetData;


続いて`AppDelegate.m`に以下の様に記述します.

```Objc```
-(void) setDelegateView:(ViewController*)delegetData{
    _delegate = delegetData;
}

このメソッドを'UIViewController'の'- (void)viewDidLoad'で以下の様に呼び出します.

Objc
AppDelegate *appdelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
[appdelegate setDelegateView:self];


これで'AppDelegate.h'のプロパティ'delegate'に,'UIViewController'を設定できます.

'UIViewController'では,通信処理等を開始するメソッドと通信処理等を終了するメソッドを記述して,外部から呼び出せる様にしておきます.(仮に'-(void)StarCom'と'-(void)StopCom'とします.)

'ViewContoroller.h'に

```Objc```
-(void)StarCom;
-(void)StopCom;

と記述して外部から呼び出せる様にします.

その上で'AppDelegate.m'に以下の様に記述します.

Objc

  • (void)applicationDidEnterBackground:(UIApplication *)application
    {
    [_delegate StopCom];

}


これでアプリケーションがバックグラウンドに入った時に通信を停止できます.

```Objc```
- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [_delegate StarCom];
}

これでユーザーがアプリアイコンをタップして起動(もしくはバックグランドからの復帰)をした時に通信を開始できます.

35
36
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?