麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

iOS捕獲異常,常用的異常處理方法

2019-11-14 19:42:23
字體:
來源:轉載
供稿:網友

前言:在開發APP時,我們通常都會需要捕獲異常,防止應用程序突然的崩潰,防止給予用戶不友好的一面。其實OBJECT-C的異常處理方法和java的雷同,懂JAVA的朋友一看就懂。我為什么要寫這篇博文呢?因為我發現百度上的介紹方法,很多都不是我想要的,而我想要的又說得不清楚,重點是大家都是直接復制別人的代碼。。。于是不多說,大家往下看~~~

 

以下程序已測試并通過:

設備:IOS8模擬器中

開發工具:XCode6.1

 

使用@try、catch捕獲異常:

以下是最簡單的代碼寫法,其中@finally可以去掉:

@try {    // 可能會出現崩潰的代碼}@catch (NSException *exception) {    // 捕獲到的異常exception}@finally {    // 結果處理}

 

在這里舉多一具比較詳細的方法,拋出異常:

@try {    // 1    [self tryTwo];}@catch (NSException *exception) {    // 2    NSLog(@"%s/n%@", __FUNCTION__, exception);//        @throw exception; // 這里不能再拋異常}@finally {    // 3    NSLog(@"我一定會執行");}// 4// 這里一定會執行NSLog(@"try");

 

tryTwo方法代碼:

- (void)tryTwo{    @try {        // 5        NSString *str = @"abc";        [str substringFromIndex:111]; // 程序到這里會崩    }    @catch (NSException *exception) {        // 6//        @throw exception; // 拋出異常,即由上一級處理        // 7        NSLog(@"%s/n%@", __FUNCTION__, exception);    }    @finally {        // 8        NSLog(@"tryTwo - 我一定會執行");    }        // 9    // 如果拋出異常,那么這段代碼則不會執行    NSLog(@"如果這里拋出異常,那么這段代碼則不會執行");}

為了方便大家理解,我在這里再說明一下情況:

如果6拋出異常,那么執行順序為:1->5->6->8->3->4如果6沒拋出異常,那么執行順序為:1->5->7->8->9->3->4

 

2)部分情況的崩潰我們是無法避免的,就算是QQ也會有崩潰的時候。因此我們可以在程序崩潰之前做一些“動作”(收集錯誤信息),以下例子是把捕獲到的異常發送至開發者的郵箱。

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    // Override point for customization after application launch.    NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);    return YES;}void UncaughtExceptionHandler(NSException *exception) {    /**     *  獲取異常崩潰信息     */    NSArray *callStack = [exception callStackSymbols];    NSString *reason = [exception reason];    NSString *name = [exception name];    NSString *content = [NSString stringWithFormat:@"========異常錯誤報告========/nname:%@/nreason:/n%@/ncallStackSymbols:/n%@",name,reason,[callStack componentsJoinedByString:@"/n"]];    /**     *  把異常崩潰信息發送至開發者郵件     */    NSMutableString *mailUrl = [NSMutableString string];    [mailUrl appendString:@"mailto:[email protected]"];    [mailUrl appendString:@"?subject=程序異常崩潰,請配合發送異常報告,謝謝合作!"];    [mailUrl appendFormat:@"&body=%@", content];    // 打開地址    NSString *mailPath = [mailUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:mailPath]];}

 

發送郵件的操作,具體請查看我的另一篇博文:

IOS開發-發送郵件(E-mail)方法整理合集(共3種)

 


博文作者:GarveyCalvin

博文出處:http://www.companysz.com/GarveyCalvin/

本文版權歸作者和博客園共有,歡迎轉載,但須保留此段聲明,并給出原文鏈接,謝謝合作!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 毛片在线看免费 | 2019中文字幕在线播放 | 免费观看视频在线观看 | 久草中文网 | 日韩一级片一区二区三区 | 日韩精品二区 | 久久国产精品久久久久久电车 | 国产1区2区3区中文字幕 | a一级黄色大片 | 精品成人av一区二区在线播放 | 午夜影院a| 精品国产一区二区三区久久久 | 天天草夜夜爽 | 欧美成人二区 | 2018亚洲男人天堂 | 精品在线免费播放 | 亚洲一区二区三区视频免费 | 亚洲免费观看视频 | 1区2区3区在线观看 欧美特黄a | 91精品国产乱码久久久久久久久 | 国产成人精品网站 | 成人精品视频网站 | 亚洲一区中文字幕 | 毛片118极品美女写真 | 国产精品久久久久久久久久久久午夜 | 精品亚洲视频在线 | 免费一级高清毛片 | 大学生一级毛片在线视频 | 日本精品久久久一区二区三区 | 中文日产幕无线码6区免费版 | 成人做爽爽爽爽免费国产软件 | 国产午夜精品在线 | 久国久产久精永久网页 | 亚洲第一成人在线视频 | 性大片1000免费看 | 久久精品亚洲一区二区 | 国产亚洲精久久久久久蜜臀 | 亚洲综合一区在线观看 | 久色网站 | 男女一边摸一边做羞羞视频免费 | 国产 一区 精品 |