版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2017.08.27 |
前言
NSDictionary
是不可變字典,它的不可變性可以參考NSArray
數(shù)組竿刁,但是它與數(shù)組還是有很大不同盒卸,盡管他們都屬于集合類,下面這幾篇我們繼續(xù)來將一下基礎(chǔ)類的知識结执。還是老規(guī)矩從整體到局部度陆,從淺入深進(jìn)行講解,謝謝大家献幔。感興趣的可以參考我上面幾篇懂傀。
1. NSDictionary細(xì)說(一)—— 整體了解
一、+ (instancetype)dictionary;
該方法的作用就是:創(chuàng)建并返回一個空的字典蜡感。該方法主要用于NSDictionary
的可變子類蹬蚁。如果不想要臨時對象,還可以使用alloc ...和init創(chuàng)建一個空字典郑兴。
下面看示例代碼犀斋。
- (void)demoDictionary
{
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
NSLog(@"dict = %@", dict);
}
看輸出結(jié)果
2017-08-27 16:50:33.670 JJOC[6245:199913] dict = {
}
結(jié)論:空字典實例化。
二情连、+ (NSDictionary<KeyType,ObjectType> *)dictionaryWithContentsOfFile:(NSString *)path;
該方法的作用就是:使用由給定路徑指定的文件中找到的鍵和值創(chuàng)建并返回字典叽粹。
下面看一下參數(shù)和返回值:
-
path
:一個完整的或相對的路徑名。 由路徑標(biāo)識的文件必須包含屬性列表的字符串表示却舀,其根對象是字典虫几。 -
return
:一個新的字典,其中包含路徑中的字典挽拔,如果存在文件錯誤或文件的內(nèi)容是字典的無效表示辆脸,則為nil。
還要注意:
- 由路徑標(biāo)識的文件中的字典表示只能包含屬性列表對象
(NSString螃诅,NSData啡氢,NSDate,NSNumber术裸,NSArray或NSDictionary對象)
倘是。 該字典包含的對象是不可變的,即使字典是可變的穗椅。
下面看示例代碼
- (void)demoDictionaryWithContentsOfFile
{
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:@"/Users/lucy/Desktop/demo/JJOC/JJOC/Property List.plist"];
NSLog(@"dict = %@", dict);
}
下面看輸出結(jié)果
2017-08-27 20:36:02.897 JJOC[7260:234979] dict = {
One = 1;
Three = 3;
Two = 2;
}
下面看我建立的plist
文件辨绊。
結(jié)論:根據(jù)文件生成字典。
三匹表、+ (NSDictionary<KeyType,ObjectType> *)dictionaryWithContentsOfURL:(NSURL *)url;
該方法的作用就是:使用由給定URL指定的資源中找到的鍵和值創(chuàng)建并返回字典门坷。
下面看參數(shù):
-
url
:一個URL宣鄙,用于標(biāo)識包含其根對象是字典的屬性列表的字符串表示形式的資源。 -
return
:一個包含aURL字典的新字典默蚌,如果有錯誤或資源的內(nèi)容是字典的無效表示冻晤,則為零。
還要注意:
- 由路徑標(biāo)識的文件中的字典表示只能包含屬性列表對象
(NSString绸吸,NSData鼻弧,NSDate,NSNumber锦茁,NSArray或NSDictionary對象)
攘轩。 該字典包含的對象是不可變的,即使字典是可變的码俩。
結(jié)論:根據(jù)指定的URL生成字典度帮。
四、+ (instancetype)dictionaryWithDictionary:(NSDictionary<KeyType,ObjectType> *)dict;
該方法的作用就是:創(chuàng)建并返回一個包含來自另一個給定字典的鍵和值的字典稿存。
看示例代碼
- (void)demoDictionaryWithDictionary
{
NSDictionary *givenDict = @{@"One" : @"1", @"Two" : @"2"};
NSDictionary *dict = [NSDictionary dictionaryWithDictionary:givenDict];
NSLog(@"dict = %@", dict);
}
看輸出結(jié)果
2017-08-27 20:44:18.039 JJOC[7584:243640] dict = {
One = 1;
Two = 2;
}
結(jié)論:根據(jù)給定字典實例化新的字典笨篷。
五、+ (instancetype)dictionaryWithObject:(ObjectType)object forKey:(id<NSCopying>)key;
該方法的作用是:創(chuàng)建并返回包含給定鍵和值的字典瓣履。
看一下參數(shù):
-
object
:與aKey相對應(yīng)的值率翅。如果此值為nil,則會引發(fā)NSInvalidArgumentException
袖迎。 -
key
:對象的鍵冕臭。如果此值為nil,則會引發(fā)NSInvalidArgumentException
瓢棒。 -
return
:一個包含單個對象的新字典浴韭,anObject丘喻,用于單個鍵脯宿,aKey。
下面看示例代碼
- (void)demoDictionaryWithObject
{
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"1" forKey:@"One"];
NSLog(@"dict = %@", dict);
}
看輸出結(jié)果
2017-08-27 20:50:40.159 JJOC[7838:250574] dict = {
One = 1;
}
結(jié)論:實例化具有單個鍵值對的字典泉粉。
六连霉、+ (instancetype)dictionaryWithObjects:(NSArray<ObjectType> *)objects forKeys:(NSArray<id<NSCopying>> *)keys;
該方法的作用就是:創(chuàng)建并返回一個字典,其中包含從數(shù)組的內(nèi)容生成的鍵和值嗡靡。
下面看輸出結(jié)果:
-
objects
:包含新字典值的數(shù)組跺撼。 -
keys
:包含新字典鍵的數(shù)組。 每個密鑰被復(fù)制(使用copyWithZone:
;密鑰必須符合NSCopying協(xié)議)讨彼,并且該副本被添加到字典中歉井。 -
return
:一個新的字典,根據(jù)內(nèi)容獲取的鍵和值哈误。
還要注意:
- 該方法會遍歷對象和鍵數(shù)組哩至,并根據(jù)其創(chuàng)建字典躏嚎。 如果對象和鍵不具有相同數(shù)量的元素,則會引發(fā)
NSInvalidArgumentException
異常菩貌。
下面看示例代碼
- (void)demoDictionaryWithObjects
{
NSArray *keys = @[@"One", @"Two"];
NSArray *values = @[@1 , @2];
NSDictionary *dict = [NSDictionary dictionaryWithObjects:values forKeys:keys];
NSLog(@"dict = %@", dict);
}
看輸出結(jié)果
2017-08-27 20:58:55.582 JJOC[8099:258476] dict = {
One = 1;
Two = 2;
}
結(jié)論:根據(jù)鍵值數(shù)組和值數(shù)組創(chuàng)建多鍵值對的字典卢佣。
七、+ (instancetype)dictionaryWithObjects:(const ObjectType _Nonnull [])objects forKeys:(const id<NSCopying> _Nonnull [])keys count:(NSUInteger)cnt;
該方法的作用是:返回具有固定鍵值對數(shù)組的字典箭阶。
下面看一下參數(shù)和返回值:
-
objects
:新字典的C數(shù)組值虚茶。 -
keys
:用于新字典的C數(shù)組鍵。 每個鍵被復(fù)制(使用copyWithZone:
仇参,鍵必須符合NSCopying協(xié)議)嘹叫,并且該副本被添加到新的字典中。 -
cnt
:從鍵和對象數(shù)組中使用的元素數(shù)诈乒。 計數(shù)不得超過對象或鍵中元素的數(shù)量待笑。
還要注意:
- 他的方法遍歷對象和鍵數(shù)組,在新字典中創(chuàng)建條目抓谴。 如果key或value對象為nil暮蹂,則會引發(fā)
NSInvalidArgumentException
異常。 - 以下代碼片段說明了如何創(chuàng)建將字母字符與其ASCII值相關(guān)聯(lián)的字典:
static const NSInteger N_ENTRIES = 26;
NSDictionary *asciiDict;
NSString *keyArray[N_ENTRIES];
NSNumber *valueArray[N_ENTRIES];
NSInteger i;
for (i = 0; i < N_ENTRIES; i++) {
char charValue = 'a' + i;
keyArray[i] = [NSString stringWithFormat:@"%c", charValue];
valueArray[i] = [NSNumber numberWithChar:charValue];
}
asciiDict = [NSDictionary dictionaryWithObjects:(id *)valueArray
forKeys:(id *)keyArray count:N_ENTRIES];
看一下這個示例的輸出結(jié)果
2017-08-27 21:08:34.600 JJOC[8380:266866] asciiDict = {
a = 97;
b = 98;
c = 99;
d = 100;
e = 101;
f = 102;
g = 103;
h = 104;
i = 105;
j = 106;
k = 107;
l = 108;
m = 109;
n = 110;
o = 111;
p = 112;
q = 113;
r = 114;
s = 115;
t = 116;
u = 117;
v = 118;
w = 119;
x = 120;
y = 121;
z = 122;
}
結(jié)論:根據(jù)C數(shù)組包含的鍵值創(chuàng)建指定數(shù)目鍵值對的字典癌压。
八仰泻、+ (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ...;
該方法的作用是:創(chuàng)建并返回一個字典,其中包含從指定的值和鍵集合構(gòu)造的條目滩届。
下面看一下參數(shù):
-
firstObject
:添加到新字典的第一個值集侯。 -
...
:首先是firstObj的關(guān)鍵字,然后是一個空值終止的交替值和鍵列表帜消。 如果任何鍵為nil棠枉,則會引發(fā)NSInvalidArgumentException異常。
下面還要注意:
- 該方法類似于
dictionaryWithObjects:forKeys:
泡挺,僅在鍵值對中指定的方式不同辈讶。
看一下下面示例代碼
- (void)demoDictionaryWithObjectsAndKeysOC
{
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"value1", @"key1", @"value2", @"key2", nil];
NSLog(@"dict = %@", dict);
}
看輸出結(jié)果
2017-08-27 21:13:48.833 JJOC[8664:273512] dict = {
key1 = value1;
key2 = value2;
}
結(jié)論:根據(jù)有序的值鍵排序創(chuàng)建字典。
后記
未完娄猫,待續(xù)~~~