iOS給字典中插入nil的幾種情景
NSString *str = nil;
NSDictionary *dic = @{@”key”:str};
//zs20171220 會崩潰`*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]
字面量新增nil 會崩潰
NSString *str = nil;
NSDictionary *dicParam = [[NSDictionary alloc] initWithObjectsAndKeys:@””,@”key1″,str,@”key2″,nil];
NSLog(@”dicParam____%@”,dicParam[@”key2″]);//zs20171220 value 值可以為nil,但是這個時候nil意味著結束新增了
NSLog(@”dicParam____%@”,dicParam.allKeys); NSLog(@”dicParam____%@”,dicParam[@”key1″]);//zs20171220 key 不能設定成nil 否則會崩潰
NSString *str = nil;
NSMutableDictionary *dicMutable = [NSMutableDictionary dictionaryWithCapacity:0];
[dicMutable setValue:str forKey:@”key1″];//zs20171220 插入nil 不會崩潰
[dicMutable setValue:@”ddd” forKey:@”key2″];
[dicMutable setValue:nil forKey:@”key3″];//zs20171220 插入nil 不會有這個key 和值
NSLog(@”___%@”,dicMutable);
20180925+總結:
用字面量語法建立陣列時要注意,若陣列元素中有nil, 則會丟擲異常,因為字面量語法實際上只是一種“語法糖”(syntactic sugar),其效果等於是先建立了一個陣列,然後把方括號內的所有物件都加到這個陣列中。
eg:
NSArray *arrayA = [NSArray arrayWithObjects:obj1,obj2,obj3,nil];
NSArray *arrayB = @[obj1,obj2,obj3];
如果obj1與obj3都指向了有效的OC物件,而obj2是nil,按字面量語法建立陣列arrayB時會丟擲異常。
arrayA 雖然能建立出來,但是其中卻只含有obj1一個物件,原因在於arrayWithObjects:方法會依次處理各個引數,直到發現nil為止,由於obj2是nil,所以該方法會提前結束。
重點(敲黑板):
這個微妙的差別說明,使用字面量語法更為安全。丟擲異常令應用程式終止執行,這比建立好陣列之後發現元素個數少了要好。
相關文章
- iOS開發中的幾種鎖iOS
- 【MyBatis】幾種批量插入效率的比較MyBatis
- iOS 開發中 runtime 常用的幾種方法iOS
- Python中幾種資料結構的整理,列表、字典、元組、集合Python資料結構
- Swift 小心字典Value等於nil(容易出錯)Swift
- iOS 幾種加密方法iOS加密
- MySql避免重複插入記錄的幾種方法MySql
- Objective-C 中 NULL、nil、Nil、NSNull 的定義及不同ObjectNull
- iOS常見的幾種加密方法iOS加密
- MySQL中特別實用的幾種SQL語句送給大家MySql
- iOS開發資料儲存篇—iOS中的幾種資料儲存方式iOS
- iOS 資料持久化的幾種方法iOS持久化
- iOS給UIImageView新增圓角的三種方法iOSUIView
- mysql忽略主鍵衝突、避免重複插入的幾種方式MySql
- mysql 忽略主鍵衝突、避免重複插入的幾種方式MySql
- Java中的幾種註釋Java
- Stream 的幾種中間操作
- iOS 中的各種鎖iOS
- iOS 中常見的幾種鎖-程式碼示例iOS
- iOS實現幾種會用到的加密方式iOS加密
- 淺談iOS常用的幾種傳值方式iOS
- iOS元件化常用的幾種構建模式iOS元件化模式
- OC中陣列、字典的遍歷的三種方法陣列
- Scala中None, Nil, Nothing的區別None
- Python中如何給字典設定預設值Python
- iOS main()執行前的過程 + weak 置 nil的過程iOSAI
- JavaScript中遍歷的幾種方法JavaScript
- js中建立物件的幾種方式JS物件
- iOS開發——資料持久化的幾種方案iOS持久化
- IOS幾種簡單有效的陣列排序方法iOS陣列排序
- [分享]iOS開發-UIAlertView的幾種觸發方法iOSUIView
- 談談axios中Post請求變成OPTIONS的幾種解決方案iOS
- CSS應用給網頁元素的幾種方式總結CSS網頁
- Makefile中幾種賦值(= := ?= +=)賦值
- Swift中 Nil Coalescing 運算子的使用技巧Swift
- Objective-c nil, Nil, NULL和NSNull的區別ObjectNull
- iOS 字典轉陣列,陣列轉字典iOS陣列
- Redis中的字典Redis