1. 程式人生 > >Objective-C中使用@try處理異常,防止程式崩潰

Objective-C中使用@try處理異常,防止程式崩潰

這一篇我們主要來講講Objective-C中的@try塊來處理異常,與@try結合一起的有@catch、@finally。文章非常基礎,希望對初學者有所幫助。

在我們編寫Objective-C程式時,最好的程式設計實踐是指能預測程式中可能出現的問題。為此,你可以測試使程式異常終止的條件並處理這些情況,可能要記錄一條訊息並完全終止程式,或者採取其他正確措施。以避免錯誤為例,在程式執行時執行測試可以避免向物件傳送未識別的訊息。當試圖傳送這類未識別訊息時,程式通常會立即終止並丟擲一個異常。

看看下面的程式碼,Fraction類中未定義任何名為noSuchMethod的方法。當你編譯程式時,就會得到相關警告訊息。

1 2 3 4 5 6 7 8 9 10 11 #import “Fraction.h” intmain (intargc, char*argv []) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Fraction *f = [[Fraction alloc] init]; [f noSuchMethod]; NSLog (@”Execution continues!”);
[f release]; [pool drain]; return0; }
你可以不管警告訊息繼續執行程式。如果這樣做,程式可能會異常終止,並出現類似如下的錯誤:
1 2 3 4 5 6 7 8 9 10 11 12

相關推薦

Objective-C使用@try處理異常防止程式崩潰

這一篇我們主要來講講Objective-C中的@try塊來處理異常,與@try結合一起的有@catch、@finally。文章非常基礎,希望對初學者有所幫助。 在我們編寫Objective-C程式時,最好的程式設計實踐是指能預測程式中可能出現的問題。為此,你

Node.js程序守護防止程式崩潰自動退出

最近用node在寫一個TCP Socket伺服器,但是客戶端異常斷開後,伺服器會報錯[Error: read ECONNRESET]錯誤,然後掛掉,上網查了相關文章,沒有好的方法,最好的就是對伺服器程式進行程序監控,如果程式退出,監控程式再重新啟動伺服器程式,進

我的女朋友漏電了–論C++的失敗(failure)缺陷(bug)和異常(exception)

c++先做個廣告置入,如果喜歡這篇文章,你可以到 zhaoyan.website/blog 去查看於此類似的C/C++文章。我承認有點標題黨了,不過這真的是一篇寫軟件的文章,所以如果你已經抽出了一張面巾紙,那麽趁早再把它完美的放回去。這篇軟件文章很軟,源代碼不多,而且大部分都是偽代碼。所以很適合所有人看。我特

Objective-C類方法的getter和setter可以用點運算符嗎?

clang col 靜態變量 變量 uri family lan getc sta Objective-C中,對象實例property的getter和setter可以使用點運算符來操作,那麽類方法的getter和setter可以使用點運算嗎? 答案是肯定的。 看如下代碼

cc++字串處理函式strtokstrstrstrchrstrsub

函式原型:char *strtok(char *s, char *delim); 函式功能:把字串s按照字串delim進行分割,然後返回分割的結果。 函式使用說: 1.strtok函式的實質上的處理是,strtok在s中查詢包含在delim中的字元並用NULL(’/0′)來替換,直到找遍整個字串。這句

C#獲取當前時間處理時間(對時間進行加減)

1.獲取當前的時間,並將時間格式化成為字串   DateTime dt=Datetime.Now;   string str=dt.ToString();        //這是最直接的轉化方法   string str2=dt.ToString("yyy-MM-dd HH:mm:ss");2.獲取年、月、日

windows 多執行緒捕獲未處理異常防止崩潰的地方影響到其它執行緒

一個windows程式,多執行緒,若有執行緒A、B,線上程A中有類似程式碼               MyClass * pClass;               pClass=NULL;               pClass->GetData();  若pC

《Windows核心程式設計》讀書筆記二十五章 未處理異常向量化異常處理C++異常

第二十五章  未處理異常,向量化異常處理與C++異常 本章內容 25.1 UnhandledExceptionFilter函式詳解 25.2 即時除錯 25.3 電子表格示例程式 25.4 向量化異常和繼續處理程式 25.5 C++異常與結構化異常的比較 25.6 異常與

Objective-C 的Runtime的詳細使用

enc ring 博客 document 每次 tps htm lec guid Runtime全面了解 一直以來,OC被大家冠以動態語言的稱謂,其實是因為OC中包含的runtime機制。Runtime 又叫運行時,是一套底層的 C 語言 API,其為 iO

objective-c 數據類型之四 字典(NSDictionary)

bject ted ray 初始化 -c lec com lock led // 1. 字典初始化、賦值方式1 NSMutableDictionary *m_dictionary = [[NSMutableDictionary alloc] initWithCa

objective-c 數據類型之二 字符串(NSString)

option 大小 edas 字符串長度 seq scan 後者 code form // 1. 聲明一個NSString對象,註意對象前要加‘*’。 NSString *string1; // 賦值方

中文在C/C++處理和漢字亂碼問題(wchar_t)

生成 setlocale 錯誤 並且 超過 函數 開發 長度 tracking 中文字在C/C++中的處理 現在編程的語言和編程環境隨著中國的發展開始對中文有進一步的支持。可是對中文的支持整體來說是有缺陷的,並且有與編譯環境的不同導

C#Convert.ToDouble異常

ica 正常 本地 便是 出現 客戶 本機 轉換 機器 Convert.ToDouble轉換的時候,輸入參數即便是“0.5”這樣正常的字符串,也會引發異常,而大多是本機調試無異常,而放到客戶機器會拋出異常的情況 問題出現在C#的本地語言設置裏面(惡

Objective-C的@property和@synthesize用法

有時 頭文件 關鍵字 nbsp nsa atomic 所有者 ica 風險 描述 @代表“Objective-C”的標誌,證明您正在使用Objective-C語言。 是Objective-C語言關鍵詞。 @property與@synthesize配對使用。 功能:讓編譯

C++函數模板顯式具體化顯式實例化:

程序 使用 集合 typename 內容 方法 區分 bsp 代碼 函數模板 形如: template<typename T> //沒有分號 void func(T &a,T &b); 稱為函數模板,其中,template和typename為關

c++STL 關於mapsetvector的用法

  一、vector vector相當於是一個可以存放一個任意資料型別的一個容器,通過迭代器可以對其進行相應的操作,如下:   1 vector<CString> arrTest; 2 arrTest.push_back(L"你"); 3 arr

c++什麼是引用什麼是指標。

引用就是引用地址,給變數取個小名,這個都可以改變變數的數值。 程式碼: #include <iostream>   using namespace std;   int main () {    // 宣告簡單的變數   &n

Objective-C的訊息傳送總結

關於OC中的訊息傳送的實現,在去年也看過一次,當時有點不太理解,但是今年再看卻很容易理解。 我想這跟知識體系的構建有關,如果你不認識有磚、水泥等這些建築的基本組成部分,那麼我們應該很難理解建築是怎麼建造出來的吧? 學習新知識,應該也是同樣的道理! 資料 今年再看 訊息傳送機制時,

C++const與引用指標之間的關係要點

一、const關鍵字 1、有時我們希望定義這樣的一個變數,它的值不能被改變。這時就可以在定義變數時加上const關鍵字。例如 const int bufSize=512; const型別變數可以進行大部分與非const型別變數相同操作,主要的限制就是不可以在const型別的物件上執

Objective-C的記憶體管理機制

從蘋果的官方文件來看,OC對應用程式的記憶體管理提供了2種方法。 第一種即“manual retain-release”(MRR),手動保留釋放,也可理解為手動引用計數。 第二種,“Automatic Reference Counting”(ARC),自動引用計數。但是ARC並不等同垃圾回收。在蘋果的官方