zoukankan      html  css  js  c++  java
  • 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或者一种弱类型。

  • 相关阅读:
    Http协议的断点续传下载器,使用观察者模式监视下载进度,使用xml保存下载进度。
    C++ 复制到粘贴板
    编译防火墙——C++的Pimpl惯用法解析
    字符串输出
    windows路径操作API函数
    Boost解析xml——xml写入
    智能指针shared_ptr
    Boost 解析xml——插入Item
    ListCtrl添加右键菜单(在对话框类中)
    抓包工具Charles的使用说明
  • 原文地址:https://www.cnblogs.com/feng9exe/p/10214370.html
Copyright © 2011-2022 走看看