NSDictionary用于保存具有映射关系的数据。NSDictionary集合保存了2组值——一组存 key, 一组存 value。
value与 key 都可以是任何引用类型的数据。Map 的 key 不允许重复。value与 key存在但相向一对一的关系。一个 key 对应唯一的一个 value.
NSDictionary的功能与用法
NSDictionary的创建同样有类方法和实例方法。以 dictionary 开头的是类方法,以 init 开头的是实例方法。
创建NSDictionary对象的几类常见方法:
创建NSDictionary对象的几类常见方法:
1. dictionary:
——创建一个不包含任何 key-value 对的NSDictionary
2. dictionaryWithContentsOfFile:/initWithContentsOfFile:
——读取指定文件的内容来初始化NSDictionary(该文件通常是由NSDictionary自己输出生成)
3. dictionaryWithDictionary:/initWithDictionary:
——用已有的包含 key-value 对 来初始化NSDictionary对象
4. dictionaryWithObject: forKey:
——用单个key-value 对 创建NSDictionary对象
5. dictionaryWithObjects:<#(nonnull NSArray *)#> forKeys:<#(nonnull NSArray<id<NSCopying>> *)#>
——使用2个NSArray分别指定 key,value 集合,可以创建多组key-value 对的NSDictionary。
6. dictionaryWithObjectsAndKeys:
——按 value1,key1,value2,key2,……nil 的格式传入多个键值对。
得到NSDictionary对象后,如何访问该集合包含的 key 或 value 呢?
得到NSDictionary对象后,如何访问该集合包含的 key 或 value 呢?
1. count
:——返回NSDictionary包含的键值对的数量
2. allKeys
:——返回NSDictionary包含的全部 key.
3. allKeysForObject:
——返回指定 value 对应的所有 key
4. allValues
:——返回NSDictionary包含的全部 value
5. objectForKey:
——获取该NSDictionary中指定 key 对应的 value
6. objectForKeyedSubscript:
——通过该方法,允许NSDictionary通过下标法来获取指定 key 对应的 value
7. valueForKey:
——获取该NSDictionary中指定 key 对应的 value
8. keyEnumerator:
——返回用于遍历该NSDictionary所有key 的 NSEnumerator对象。
9. objectEnumerator:
————返回用于遍历该NSDictionary所有value 的 NSEnumerator对象。
10. enumerateKeysAndObjectsUsingBlock:
——使用代码块,来迭代执行该集合中所有的 键值对。
11. enumerateKeysAndObjectsWithOptions:<#(NSEnumerationOptions)#> usingBlock:
————使用代码块,来迭代执行该集合中所有的 键值对,该方法可以传入一个额外得到 option参数
12. writeToFile:<#(nonnull NSString *)#> atomically:<#(BOOL)#>
——将该字典对象的数据写入指定文件。
示例代码:
FKUser.h
#import <Foundation/Foundation.h>
@interface FKUser : NSObject
@property (nonatomic , copy) NSString* name;
@property (nonatomic , copy) NSString* pass;
- (id) initWithName:(NSString*) aName
pass:(NSString*) aPass;
- (void) say:(NSString*) content;
@end
FKUser.m
#import "FKUser.h"
@implementation FKUser
@synthesize name;
@synthesize pass;
- (id) initWithName:(NSString*) aName
pass:(NSString*) aPass
{
if(self = [super init])
{
name = aName;
pass = aPass;
}
return self;
}
- (void) say:(NSString*) content
{
NSLog(@"%@说:%@",self.name , content);
}
// 会重写isEqual:方法,重写该方法的比较标准是,
// 如果两个FKUser的name、pass相等,即可认为两个FKUser相等。
- (BOOL) isEqual:(id)other
{
if(self == other)
{
return YES;
}
if([other class] == FKUser.class)
{
FKUser* target = (FKUser*)other;
return [self.name isEqualToString:target.name]
&& [self.pass isEqualToString:target.pass];
}
return NO;
}
// 会重写isEqual:方法,重写该方法的比较标准是,
// 如果两个FKUser的name、pass相等,即可认为两个FKUser相等。
- (NSUInteger) hash
{
NSUInteger nameHash = name == nil ? 0 : [name hash];
NSUInteger passHash = pass == nil ? 0 : [pass hash];
return nameHash * 31 + passHash;
}
// 重写description方法,可以直接看到FKUser对象的状态
- (NSString*) description
{
return [