//
// ViewController.m
// 第14章 专家级技巧:错误处理
//
// Created by meipaipai on 17/2/3.
// Copyright © 2017年 meipaipai. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()<NSURLConnectionDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//14-1.运行时错误情况
//-- 程序运行时出现的错误情况
//-- 逻辑错误,语义错误,用户输入错误
/*
* 1.断言:判断条件是否成立,检查编程逻辑和语义错误
* 2.错误编码:标示制定运行时错误
* 3.错误对象:用于封装和传输用户需要了解的运行时错误信息
* 4.异常:程序运行过程中出现的反常
*/
//14-2 NSError类
//-- 创建错误对象, 属性是错误编码,错误域和用户信息目录。
// NSError *error = [NSError errorWithDomain:NSCocoaErrorDomain code:NSFileNoSuchFileError userInfo:nil];
//如果在指定目录没有找到文件,这个错误对象就会被创建
NSString *desc = NSLocalizedString(@"FileNotFound", @"");
NSDictionary *info = @{NSLocalizedDescriptionKey:desc};
NSError *err = [NSError errorWithDomain:NSCocoaErrorDomain code:NSFileNoSuchFileError userInfo:info];
NSLog(@"%@", err);
/*errorWithDomain:错误域
FOUNDATION_EXPORT NSErrorDomain const NSCocoaErrorDomain;//Cocoa Frameworks的错误编码
FOUNDATION_EXPORT NSErrorDomain const NSPOSIXErrorDomain;//源自遵守POSIX标准的Unix版本的错误编码
FOUNDATION_EXPORT NSErrorDomain const NSOSStatusErrorDomain;//Apple OS X Core Services 和 Carbon framework的错误编码
FOUNDATION_EXPORT NSErrorDomain const NSMachErrorDomain;//OS内核错误编码
*/
//1.使用错误对象
//-- 委托:将错误对象作为参数传送给委托方法
//-- 间接:从程序调用的方法间接获取错误对象
// NSError *writeerr;
// NSData *greeting = [@"Hello, world" dataUsingEncoding:NSUTF8StringEncoding];
// BOOL success = [FileWriter write......]
//14-3 异常处理,运行过程中处理异常的机制
@try {
// Code that can potentially throw an exception
//可能抛出异常的代码
} @catch (NSException *exception) {
// Handle an exception thrown in the @try block
//处理异常的代码
@throw exception;
// @throw expression 抛出异常
} @finally {
// Code that gets executed whether or not an exception is thrown
//释放资源的代码
}
//14-4 NSException 类
//-- 管理异常
//exceptionWithName 异常名称
//reason 异常原因
//userInfo 自定义信息目录
// NSException *exception = [NSException exceptionWithName:NSGenericException reason:@"111" userInfo:nil];
// @try {
// [NSException raise:NSGenericException format:@"%@", @"22222"];
// } @catch (NSException *exception) {
// NSLog(@"%@--\n%@", [exception name], [exception description]);
// }
NSArray *array = @[@"1", @"2", @"3", @"4"];
@try {
int a = 4;
NSLog(@"%@", array[a]);
} @catch (NSException *exception) {
NSLog(@"%@--\n%@", [exception name], [exception description]);
}
/*
FOUNDATION_EXPORT NSExceptionName const NSGenericException;
FOUNDATION_EXPORT NSExceptionName const NSRangeException;
FOUNDATION_EXPORT NSExceptionName const NSInvalidArgumentException;
FOUNDATION_EXPORT NSExceptionName const NSInternalInconsistencyException;
FOUNDATION_EXPORT NSExceptionName const NSMallocException;
FOUNDATION_EXPORT NSExceptionName const NSObjectInaccessibleException;
FOUNDATION_EXPORT NSExceptionName const NSObjectNotAvailableException;
FOUNDATION_EXPORT NSExceptionName const NSDestinationInvalidException;
FOUNDATION_EXPORT NSExceptionName const NSPortTimeoutException;
FOUNDATION_EXPORT NSExceptionName const NSInvalidSendPortException;
FOUNDATION_EXPORT NSExceptionName const NSInvalidReceivePortException;
FOUNDATION_EXPORT NSExceptionName const NSPortSendException;
FOUNDATION_EXPORT NSExceptionName const NSPortReceiveException;
FOUNDATION_EXPORT NSExceptionName const NSOldStyleException;
*/
//比较
//错误对象:可以封装错误信息,为恢复操作提供基础信息,cocoa框架支持。 难维护,难理解,可读性差,与程序逻辑放在一起。
//异常:检测异常和处理异常操作分开,提高了程勋可维护性。检测异常到处理异常的自动化。 浪费资源,降低程序性能,cocoa框架,不是异常安全式框架。
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
Objective-C:错误处理
最新推荐文章于 2022-02-18 10:43:39 发布