NSMapTable
类似于字典的集合,但具有更广泛的可用内存语义;继承自NSObject;NSMapTable具有以下特点:
- 与NSDictionary一样,以键值对的方式存储内容;
- key 可以不用遵循 NSCopying 协议;
- key 和 value 的内存管理方式可以分开,如:key 是强引用,value 是弱引用;
创建和初始化
// 根据选项返回映射表
NSMapTable *mapTable = [[NSMapTable alloc]initWithKeyOptions:NSPointerFunctionsStrongMemory valueOptions:NSPointerFunctionsStrongMemory capacity:5];
NSPointerFunctions *functions = [[NSPointerFunctions alloc]initWithOptions:NSPointerFunctionsStrongMemory];
// 根据方法返回映射表
NSMapTable *mapTable1 = [[NSMapTable alloc]initWithKeyPointerFunctions:functions valuePointerFunctions:functions capacity:5];
// 创建对键和值的强引用的映射表
NSMapTable *mapTable2 = [NSMapTable strongToWeakObjectsMapTable];
// 创建对键的强引用和值的弱引用的映射表
NSMapTable *mapTable3 = [NSMapTable strongToWeakObjectsMapTable];
// 创建对键和值的弱引用的映射表
NSMapTable *mapTable4 = [NSMapTable weakToWeakObjectsMapTable];
// 创建对键的弱引用和值的强引用的映射表
NSMapTable *mapTable5 = [NSMapTable weakToStrongObjectsMapTable];
操作内容
NSMapTable *mapTable = [NSMapTable strongToWeakObjectsMapTable];
// 将指定的键值对添加到映射表中
[mapTable setObject:@"obj0" forKey:@"key0"];//key0 -> obj0
// 从映射表中删除指定的键及其关联值
[mapTable removeObjectForKey:@"key0"];//{}
// 清空映射表中的键值对
[mapTable removeAllObjects];//{}
访问内容
NSMapTable *mapTable = [NSMapTable strongToWeakObjectsMapTable];
// 将指定的键值对添加到映射表中
[mapTable setObject:@"obj0" forKey:@"key0"];//key0 -> obj0
[mapTable setObject:@"obj1" forKey:@"key1"];//key1 -> obj1
// 获取指定键的关联值
NSString *obj = [mapTable objectForKey:@"key0"];//obj0
// 获取映射表中键值对的数量
NSUInteger count = [mapTable count];//obj0
// 根据枚举器遍历键
NSEnumerator *enumerator = [mapTable keyEnumerator];
id object;
while (object = [enumerator nextObject]) {
NSLog(@"开始打印:%@\n",object);
/*
开始打印:key0
开始打印:key1
*/
}
// 根据枚举器遍历值
NSEnumerator *enumerator1 = [mapTable objectEnumerator];
id object1;
while (object1 = [enumerator1 nextObject]) {
NSLog(@"开始打印:%@\n",object1);
/*
开始打印:obj0
开始打印:obj1
*/
}
映射表转字典
NSDictionary *dict = [mapTable dictionaryRepresentation];
优秀文章