NSHashTable 和 NSMapTable

NSHashTable 是 NSSet 的通用版本,和 NSSet / NSMutableSet 不同的是,NSHashTable 具有下面这些特性:

  • NSSet / NSMutableSet 持有成员的强引用,通过 hash 和 isEqual: 方法来检测成员的散列值和相等性。
  • NSHashTable 是可变的,没有不可变的对应版本
  • NSHashTable 可以持有成员的弱引用
  • NSHashTable 可以在加入成员时进行 copy 操作
  • NSHashTable 可以存储任意的指针,通过指针来进行相等性和散列检查

用法

NSHashTable *hashTable = [NSHashTable hashTableWithOptions:NSPointerFunctionsCopyIn];
[hashTable addObject:@"foo"];
[hashTable addObject:@"bar"];
[hashTable addObject:@42];
[hashTable removeObject:@"bar"];
NSLog(@"Members: %@", [hashTable allObjects]);
复制代码

NSMapTable 是 NSDictionary 的通用版本。和 NSDictionary / NSMutableDictionary 不同的是,NSMapTable 具有下面这些特性:

  • NSDictionary / NSMutableDictionary 对键进行拷贝,对值持有强引用。
  • NSMapTable 是可变的,没有不可变的对应版本。
  • NSMapTable 可以持有键和值的弱引用,当键或者值当中的一个被释放时,整个这一项就会被移除掉。
  • NSMapTable 可以在加入成员时进行 copy 操作。
  • NSMapTable 可以存储任意的指针,通过指针来进行相等性和散列检查。

注意: NSMapTable 专注于强引用和弱引用,意味着 Swift 中流行的值类型是不适用的,只能用于引用类型。

用法

NSMapTable *mapTable = [NSMapTable mapTableWithKeyOptions:NSMapTableStrongMemory
 valueOptions:NSMapTableWeakMemory];
[mapTable setObject:delegate forKey:@"foo"];
NSLog(@"Keys: %@", [[mapTable keyEnumerator] allObjects]);
复制代码
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值