綜述
之前看到很多NSError
的用法瘫寝,一直頗為費(fèi)解四苇。這里先拋出兩種常出現(xiàn)的形式來討論
示例一 —— NSError* 定義的對象和 &error
- 比如系統(tǒng)的JSON序列化函數(shù)中浴鸿,NSError是其中一個參數(shù)
NSError *err = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic
options:NSJSONWritingPrettyPrinted
error:&err];
我們可以看到,經(jīng)常我們傳入的 err都是一個地址,再來看函數(shù)原型。
+(nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
發(fā)現(xiàn)我們要傳入的類型其實是 (NSError**)
其實也就是這個對象指針的指針晃痴,也就是指針的地址。
err 是對象财忽,也是對象的指針倘核。所以 &error
對應(yīng)的也就是 (NSError**)
示例二 —— (NSError**) 和 *error
- 有時候一些自定義的函數(shù),和上面這個JSON序列化的系統(tǒng)函數(shù)用的是一樣的格式即彪,傳入的也是
(NSError**)
笤虫,比如
-(void)printImage:(UIImage *)image error:(NSError **)error{
if (![self print_Image:image]) { // 表示產(chǎn)生了錯誤
*error = [NSError errorWithDomain:@"Print Error"
code:01
userInfo:nil];
}
}
-
這里
(*error)
其實就是NSError的一個實例化對象。 (error是地址祖凫,*error表示地址所在的空間的內(nèi)容,也就是對象本身) - NSError的三個屬性說明
上面用到這個函數(shù)用來初始化一個NSError
對象
[NSError errorWithDomain:@"Print Error" // 域名
code:01 // 錯誤代碼
userInfo:nil] // 字典描述
- 理解這三個屬性其實不大好說酬凳,相當(dāng)于一級一級的往下惠况。比如說
- 打印圖片,文字宁仔,都屬于描述同一個大類的錯誤域名
@“Print Error”
- 打印圖片的錯誤代碼
code
為01稠屠,打印文字的錯誤代碼為02
- 每一種打印錯誤下的字典又分為
“藍(lán)牙未連接”
和“缺紙”
,“熱敏錯誤”
等等
- 打印圖片,文字宁仔,都屬于描述同一個大類的錯誤域名