Objective-C的异常处理

异常:当程序执行时,发生的某种特殊状况,打断了正常的运转流程。

  • Objective-C 的异常处理语法与Java和C++类似。通过使用 NSException, NSError 以及自定义的异常处理类来处理这些异常。
  • Objective-C 对异常的支持包括四个编译器指令: @try、@catch、@throw 以及 @finally。使用规则:
  • 如果这句或这部分代码有可能出现问题,就把它放在@try{}中.
  • @catch 捕获异常,出现了问题后,会执行到这里,然后你就可以对错误进行另外的处理,比如记录日志或者提醒用户哪错了。
  • @finally 无论是否会抛出异常,这个块中的代码都会执行。
  • @throw指令允许你抛出自己的异常。可以使用该指令抛出特定的异常。

异常分类

  1. 数组越界;
  2. 不能识别的方法选择器;
  3. 野指针调用:指针指向销毁的对象;

示例:

@try {
// @try 块中写有可能出错的代码段
NSArray *array = [NSArray array];
[array objectAtIndex:1]; //数组越界
} @catch (NSException *exception) {
// @catch 块内处理异常代码
NSLog(@"捕获到异常:%@%@",exception.name, exception.reason);
} @finally {
//可选项,不管是否出现异常,都会执行此代码段
NSLog(@"始终执行的代码!");
}
NSLog(@"Hello, World!");

输出结果:

Demo[17328:3652315] 捕获到异常:NSRangeException*** -[__NSArray0 objectAtIndex:]: index 1 beyond bounds for empty NSArray
Demo[17328:3652315] 始终执行的代码!
Demo[17328:3652315] Hello, World!

版权声明:著作权归作者所有。

相关推荐

C++队列缓存的实现

为什么使用队列缓存c++的队列缓存主要用于解决大数据量并发时的数据存储问题,可以将并发时的数据缓存到队列中,当数据量变小时再匀速写入硬盘中。 引用queue队列在头文件中引用queue队列#include <queue>using namespace std; 定义缓存结构体struct DataInfo{ char* pBuf;//缓存内容 int iSize;//缓存大小 D

C#对List的元素按属性排序

C#对List元素排序有几种方法。方法一、使用LinqList<User> sortedList = list.OrderBy(o=>o.ID).ToList();如果按降序排序,可以使用OrderByDescending方法:List<User> sortedList = list.OrderByDescending(o=>o.ID).ToList();方法二

C++17 获取文件字节大小的方法

C++ 17可以使用filesystem来获取文件路径的字节大小:#include <cstdint>#include <filesystem>// ...std::uintmax_t size = std::filesystem::file_size("c:\\foo\\bar.txt");需要注意的是,除非是独自占有地打开文件来读,否在文件的字节大小会随着读的过程而变化

C#计算用户年龄

此方法仅用于简单计算年龄,不适用于计算虚岁public static int GetAge(DateTime birthDate) {     DateTime now = DateTime.Now;      int age&n

关于Java异常

在这篇博文里,我们思考下检查异常 (checked exception)和非检查异常(unchecked exception),特别是它们在函数式编程里的影响。十几年前Java出现时,在当时它是相当有创意的。特别是它的异常处理机制,相对先前的C/C++有了很大的提高。例如,读取文件可以出现很多异常:文件可以不存在,可以为只读等等。相关Java的伪代码类似于:File&