iOS中setValue和setObject的區(qū)別詳解
網(wǎng)上關(guān)于setValue和setObject的區(qū)別的文章很多,說的并不準(zhǔn)確,首先我們得知道:
setObject:ForKey: 是NSMutableDictionary特有的;setValue:ForKey:是KVC的主要方法
話不多說,上代碼:
- (void)viewDidLoad {
[super viewDidLoad];
//setObject和setvalue的區(qū)別
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
NSMutableArray *array = [NSMutableArray array];
[array insertObject:@"1" atIndex:0];
[array insertObject:@"2" atIndex:1];
[dic setObject:[NSNull null] forKey:@"haha"];
[dic setObject:[NSNull null] forKey:array];
[dic setObject:[NSNull null] forKey:[NSNull null]];
[dic setObject:@1 forKey:@""];
[dic setObject:@"" forKey:@1];
[dic setObject:nil forKey:@""];
[dic setObject:@"" forKey:nil];
NSLog(@"dic:%@",dic);
//setobject中的key和value可以為除了nil外的任何對象
NSLog(@"*****************");
[dic removeAllObjects];
NSLog(@"dic:%@",dic);
[dic setValue:[NSNull null] forKey:@"haha"];
[dic setValue:[NSNull null] forKey:array];
[dic setValue:[NSNull null] forKey:[NSNull null]];
[dic setValue:@1 forKey:@""];
[dic setValue:@"" forKey:@1];
[dic setValue:nil forKey:@""];
[dic setValue:@"" forKey:nil];
[dic setValue:@"" forKey:@"hehe"];
[dic setValue:array forKey:@""];
NSLog(@"dic2:%@",dic);
//setValue中的KEY只能為字符串 value可以為nil也可以為空對象[NSNull null]
}
程序崩潰,原因就在這幾個警告,由代碼得出以下結(jié)論:
setobject中的key和value可以為除了nil外的任何對象
setValue中的key只能為字符串 value可以為nil也可以為空對象[NSNull null]以及全部對象
總結(jié)兩者的區(qū)別:
setObject:forked:中object是不能夠為nil的,不然會報錯。
setValue:forKey:中value能夠為nil,但是當(dāng)value為nil的時候,會自動調(diào)用removeObject:forKey方法
setValue:forKey:中key的參數(shù)只能夠是NSString類型,而setObject:forKey:的可以是任何類型
注意:setObject:forKey:對象不能存放nil要與下面的這種情況區(qū)分:
[imageDictionary setObject:[NSNullnull] forKey:indexNumber];
[NSNull null]表示的是一個空對象,并不是nil,注意這點
setObject:forKey:中Key是NSNumber對象的時候,如下:
[imageDictionary setObject:obj forKey:[NSNumber numberWithInt:10]];
上面說的區(qū)別是針對調(diào)用者是dictionary而言的。setObject:forKey:方法NSMutabledictionary特有的,而setValue:forKey:方法是KVC(鍵-值編碼)的主要方法。
當(dāng) setValue:forKey:方法調(diào)用者是對象的時候: setValue:forKey:方法是在NSObject對象中創(chuàng)建的,也就是說所有的oc對象都有這個方法,所以可以用于任何類。
以上所述是小編給大家介紹的iOS中setValue和setObject的區(qū)別詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- iOS獲取AppIcon and LaunchImage''s name(app圖標(biāo)和啟動圖片名字)
- IOS9.0 LaunchScreen.StroyBoard自定義啟動圖片詳解
- IOS LaunchScreen設(shè)置啟動圖片與啟動頁停留時間詳解
- 快速解決低版本Xcode不支持高版本iOS真機調(diào)試的問題方法
- IOS開發(fā) 支持https請求以及ssl證書配置詳解
- iOS實現(xiàn)自定義日期選擇器示例
- iOS 獲取公歷、農(nóng)歷日期的年月日的實例代碼
- iOS界面跳轉(zhuǎn)時導(dǎo)航欄和tabBar的隱藏與顯示功能
- IOS App圖標(biāo)和啟動畫面尺寸詳細(xì)介紹
相關(guān)文章
談?wù)刬OS開發(fā)之JSON格式數(shù)據(jù)的生成與解析
JSON格式取代了xml給網(wǎng)絡(luò)傳輸帶來了很大的便利,本篇文章主要介紹了iOS開發(fā):對象直接轉(zhuǎn)化成JSON詳解,具有一定的參考價值,有興趣的可以了解一下。2017-01-01
iOS開發(fā)之Objective-c的Runtime理解指南
這篇文章主要介紹了iOS開發(fā)之Objective-c的Runtime理解指南的相關(guān)資料,需要的朋友可以參考下2022-08-08
iOS開發(fā)教程之識別圖片中二維碼功能的實現(xiàn)
長按識別二維碼這個功能相信對大家來說都不陌生,最近工作中就遇到了這個需求,所以下面這篇文章主要給大家介紹了關(guān)于利用iOS識別圖片中二維碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-07-07
詳解iOS App開發(fā)中UIViewController的loadView方法使用
這篇文章主要介紹了詳解iOS App開發(fā)中UIViewController的loadView方法使用,講解了訪問view屬性時loadView方法的調(diào)用及使用loadView時的一些注意點,需要的朋友可以參考下2016-03-03
IOS百度地圖導(dǎo)航開發(fā)功能實現(xiàn)簡述
百度地圖導(dǎo)航非常實用,那么基于代碼是如何實現(xiàn)的呢,下面通過本文給大家介紹IOS百度地圖導(dǎo)航開發(fā)功能實現(xiàn)簡述,需要的朋友可以參考下本文2016-03-03
iOS16使用SwiftUI Charts創(chuàng)建折線圖實現(xiàn)實例
這篇文章主要為大家介紹了iOS16使用SwiftUI Charts創(chuàng)建折線圖實現(xiàn)實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11

