1. 程式人生 > >NSHashtable and NSMaptable

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或者一種弱型別。