iOS官方文档 Foundation篇---NSMapTable

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];

优秀文章

# TODO:

欢迎留言指正,会持续更新。。。

你可能感兴趣的:(iOS官方文档 Foundation篇---NSMapTable)