NSHashtable and NSMaptable
阿新 • • 發佈:2019-01-03
NSHashTable
NSHashTable是更廣泛意義的NSSet,區別於NSSet / NSMutableSet,NSHashTable有如下特性:
* NSSet / NSMutableSet是對其成員的強型別引用,這些成員被通過hash方法和isEqual方法來完成雜湊和對比功能
* NSHashTable是可變的
* NSHashTable可以持有weak型別的成員變數
* NSHashTable可以在新增成員變數的時候複製成員
* NSHashTable可以隨意的儲存指標並且利用指標的唯一性來進行hash同一性檢查(檢查成員變數是否有重複)和對比操作(equal),用法如下:
- NSHashTable *hashTable = [NSHashTable hashTableWithOptions:NSPointerFunctionsCopyIn];
- [hashTable addObject:@"foo"];
- [hashTable addObject:@"bar"];
- [hashTable addObject:@42];
- [hashTable removeObject:@"bar"];
- 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或者一種弱型別。