打開程序
- 入口函數(shù)
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
注意:
- 啟動程序并沒有調(diào)用WillEnterForeground這個方法忙上。
- 并不是所有狀態(tài)切換都有相應(yīng)的方法來通知,比如從Background到Suspended桥帆。所以當(dāng)你按下Home鍵的時候,我們只知道調(diào)用了WillResignActive和DidEnterBackground方法账嚎,但其實應(yīng)用程序會迅速從Background進入Suspended克滴。
程序加載完畢
程序首次已經(jīng)完成啟動時執(zhí)行,若直接啟動熄驼,launchOptions中沒有數(shù)據(jù)像寒。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
NSLog(@" 程序開始 !");
return YES;
}
程序失去焦點
程序?qū)⒁ctive狀態(tài)時調(diào)用,比如按下Home鍵或有電話信息進來瓜贾。對應(yīng)applicationWillEnterForeground(將進入前臺)
- (void)applicationWillResignActive:(UIApplication*)application{
NSLog(@" 程序暫行 !");
}
這個方法用來:
- 暫停正在執(zhí)行的任務(wù)诺祸;
- 禁止計時器;
- 減少OpenGL ES幀率祭芦;
- 若為游戲應(yīng)暫停游戲筷笨;
程序進入后臺
程序已經(jīng)進入后臺時調(diào)用,對應(yīng)applicationDidBecomeActive(已經(jīng)變成前臺)
- (void)applicationDidEnterBackground:(UIApplication*)application{
NSLog(@" 程序進入后臺 !");
}
這個方法用來:
- 釋放共享資源;
- 保存用戶數(shù)據(jù)(寫到硬盤)胃夏;
- 作廢計時器轴或;
- 保存足夠的程序狀態(tài)以便下次恢復(fù);
程序從后臺回到前臺
程序即將進去前臺時調(diào)用仰禀,對應(yīng)applicationWillResignActive(將進入后臺)照雁。這個方法用來撤銷applicationWillResignActive中做的改變。
- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSLog(@"\n 程序進入前臺 !");
}
復(fù)原
當(dāng)程序復(fù)原時答恶,另一個名為 applicationDidBecomeActive 委托方法會被調(diào)用饺蚊,在此你可以通過之前掛起前保存的數(shù)據(jù)來恢復(fù)你的應(yīng)用程序:
- (void)applicationDidBecomeActive:(UIApplication*)application{
NSLog(@"程序重新激活 !");
}
注意:應(yīng)用程序在啟動時,在調(diào)用了 applicationDidFinishLaunching 方法之后也會調(diào)用 applicationDidBecomeActive 方法悬嗓,所以你要確保你的代碼能夠分清復(fù)原與啟動污呼,避免出現(xiàn)邏輯上的bug。
程序終止
當(dāng)用戶按下按鈕包竹,或者關(guān)機曙求,程序都會被終止。當(dāng)一個程序?qū)⒁=K止時會調(diào)用 applicationWillTerminate方法映企。但是如果長主按鈕強制退出悟狱,則不會調(diào)用該方法。這個方法該執(zhí)行剩下的清理工作堰氓,比如所有的連接都能正常關(guān)閉挤渐,并在程序退出前執(zhí)行任何其他的必要的工作:
- (void)applicationWillTerminate:(UIApplication*)application{
NSLog(@" 程序意外暫行 !");
}
-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application{
NSLog(@" 程序內(nèi)存警告,可能要終止程序 !");
}
如果你的類是AppDelegate類(聲明遵循UIApplicationDelegate協(xié)議)双絮,那么可以實現(xiàn)上面的方法浴麻,當(dāng)App狀態(tài)改變的時候相應(yīng)的方法會被調(diào)用;如果你的類不是AppDelegate類囤攀,那么該類如何知道App的各種狀態(tài)變化软免,以及如何使用這些函數(shù)呢?答案是使用NotificationCenter來通知焚挠。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive) name:UIApplicationWillResignActiveNotification object:[UIApplication sharedApplication]];
然后實現(xiàn)applicationWillResignActive就行了
- (void)applicationWillResignActive //自定義的函數(shù)
{
NSLog(@"%@", NSStringFromSelector(_cmd));
}
文章參考:
http://www.reibang.com/p/10c16caa353b
http://www.cnblogs.com/chenyg32/p/3873301.html