美文网首页
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