ご存知の様に,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];
}
これでユーザーがアプリアイコンをタップして起動(もしくはバックグランドからの復帰)をした時に通信を開始できます.