美文网首页
NSMapTable

NSMapTable

作者: tom__zhu | 来源:发表于2021-12-11 18:54 被阅读0次

先看一下NSMapTable是如何被使用的。为了对值做弱引用,所以使用NSMapTable。

// key is strong, value is weak because operation instance is retained by SDWebImageManager's runningOperations property
// 键是强引用,值是弱引用,因为operation实例已经被SDWebImageManager的一个属性强引用
// we should use lock to keep thread-safe because these method may not be accessed from main queue
typedef NSMapTable<NSString *, id<SDWebImageOperation>> SDOperationsDictionary;

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

  • NSDictionary/NSMutableDictionary对键做拷贝,对值强引用。而NSMapTable初始化时可以指定键和值的内存管理方式(例如:NSPointerFunctionsStrongMemory
    /NSPointerFunctionsWeakMemory具体含义参考:NSPointerFunctionsOptions
  • NSMapTable是可变的,没有不可变版本
  • NSZMapTable可以持有键和值的弱引用,当键或者值当中任意一个被释放时,整个键值对会被移除
  • NSMapTable可以在加入成员时进行copy操作
  • NSMapTable可以存储任意的指针,通过指针来进行相等性和散列检查

NOTE:
NSMapTable专注于强引用和弱引用,意味着swift中流行的值类型是不被适用的,因为只能作用于引用类型

参考

NSHashTable & NSMapTable
SDWebImage

相关文章

网友评论

      本文标题:NSMapTable

      本文链接:https://www.haomeiwen.com/subject/nltlfrtx.html