NSHashtable and NSMaptable

Posted feng9exe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSHashtable and NSMaptable相关的知识,希望对你有一定的参考价值。

NSHashTable

NSHashTable是更广泛意义的NSSet,区别于NSSet / NSMutableSet,NSHashTable有如下特性:

* NSSet / NSMutableSet是对其成员的强类型引用,这些成员被通过hash方法和isEqual方法来完成哈希和对比功能

* NSHashTable是可变的

* NSHashTable可以持有weak类型的成员变量

* NSHashTable可以在添加成员变量的时候复制成员

* NSHashTable可以随意的存储指针并且利用指针的唯一性来进行hash同一性检查(检查成员变量是否有重复)和对比操作(equal),用法如下:

  1. NSHashTable *hashTable = [NSHashTable hashTableWithOptions:NSPointerFunctionsCopyIn]; 
  2. [hashTable addObject:@"foo"]; 
  3. [hashTable addObject:@"bar"]; 
  4. [hashTable addObject:@42]; 
  5. [hashTable removeObject:@"bar"]; 
  6. NSLog(@"Members: %@", [hashTable allObjects]); 

 

NSMapTable

NSMapTable是对更广泛意义的NSDictionary。和NSDictionary / NSMutableDictionary相比具有如下特性:

* NSDictionary / NSMutableDictionary会复制keys并且通过强引用values来实现存储。

* NSMapTable是可变的。

* NSMapTable可以通过弱引用来持有keys和values,所以当key或者value被deallocated的时候,所存储的实体也会被移除。

* NSMapTable可以在添加value的时候对value进行复制

和NSHashTable类似,NSMapTable可以随意的存储指针,并且利用指针的唯一性来进行对比和重复检查。

用法:假设用NSMapTable来存储不用被复制的keys和被若引用的value,这里的value就是某个delegate或者一种弱类型。

以上是关于NSHashtable and NSMaptable的主要内容,如果未能解决你的问题,请参考以下文章

具有弱引用的 NSHashTable

NSHashTable 计数错误地报告非空

Cocoa 集合类型:NSPointerArray,NSMapTable,NSHashTable

整理出一份高级iOS面试题

不支持用作符合协议 AnyObject 的具体类型

ARC内存管理中容易忽略的问题