NSHashTable 和 NSMapTable的学习
来源:互联网 发布:穿越火线手游淘宝商城 编辑:程序博客网 时间:2024/04/30 13:05
http://blog.csdn.net/jijunyuan/article/details/39962923
NSSet和NSDictionary是两个常用的类,但是他们默认假定了其中对象的内存行为。对于NSSet,object是强引用的,和NSDictionary中的value是一样的。而NSDictionary中的key则是copy的,因此当开发者想要使NSSet的objects或者NSDictionary的values为weak,或者NSDictionary使用没有实现协议的对象作为key时,比较麻烦(需要使用NSValue的方法valueWithNonretainedObject)。
在iOS6和MAC OS X 10.5开始,提供了相对于NSSet和 NSDictionary 更通用的两个类NSHashTable和 NSMapTable。
NSHashTable是比NSSet更通用的一个相似物。NSHashTable相对于NSSet/NSMutableSet有如下特征:
- NSSet/NSMutableSet 对其对象是强引用,使用isEqual方法去检查对象是否相等,使用方法hash去获取hash值。
- NSHashTable是可变的,没有一个不变的和其对应。
- NSHashTable 可以对其对象是weak 引用。
- NSHashTable 可以在输入(加入)的时候 copy 对象。
- NSHashTable 可以包含任意指针,使用指针去做相等或者hashing检查。
- NSHashTable使用一个option去初始化,下面是可用的选项:
- NSHashTableStrongMemory:和 NSPointerFunctionsStrongMemory相同,使用此选项为默认的行为,和NSSet的内存策略相同。
- NSHashTableWeakMemory:和 NSPointerFunctionsWeakMemory相同,此选项使用weak存储对象,当对象被销毁的时候自动将其从集合中移除。
- NSHashTableCopyIn :和 NSPointerFunctionsCopyIn 相同,此选项在对象被加入到集合之前copy它们。
- NSHashTableObjectPointerPersonality:和NSPointerFunctionsObjectPointerPersonality相同,此选项是直接使用指针进行isEqual:和 hash。
- NSMapTable和NSDictionary相对应,相对于NSDictionary/NSMutableDictionary,NSMapTable有如下的特征:
- NSDictionary/NSMutableDictionary会copy对应的key,强引用相应的value。
- NSMapTable是可变的,没有一个不变的类与其对应。
- NSMapTable 可以对其 key和 value弱引用,在这种情况下当key或者value被释放的时候,此entry会自动从NSMapTable中移除。
- NSMapTable 在加入一个(key,value)的时候,可以对其value设置为copy。
- NSMapTable可以包含任意指针,使用指针去做相等或者hashing检查。
- 下面的NSMapTable例子中,key不是copy的(强引用的),value为弱引用。
NSMapTable对象在初始化的时候使用options去分别指定keys和values的行为。
NSMapTableStrongMemory:指定对应的key或者value为强引用。NSMapTableWeakMemory:指定对应的key或者value为弱引用。NSMapTableCopyIn:指定对应的key或者value在加入到集合中的时候为copy。NSMapTableObjectPointerPersonality:此选项是直接使用指针进行isEqual:和 hash 。
weak引用NSArray的实现
NSValue *value = [NSValue valueWithNonretainedObjectValue:myObj];[array addObject:value];and when you get the object:value = [array objectAtIndex:x];myObj = [value nonretainedObjectValue];
- NSHashTable 和 NSMapTable的学习
- NSHashTable 和 NSMapTable的学习
- NSHashTable 和 NSMapTable的学习
- NSHashTable和NSMapTable用法
- [iOS]NSHashTable和NSMapTable用法
- NSHashTable & NSMapTable
- NSHashTable and NSMapTable
- NSHashTable and NSMapTable
- NSHashTable and NSMapTable
- NSHashtable and NSMaptable
- NSPointerArray NSHashTable NSMapTable 详解
- NSHashTable的特性和使用
- NSHashTable的特性和使用
- 数组(字典)中添加弱引用;NSPointerArray、NSHashTable、NSMapTable
- NSMapTable
- __block __weak漫谈基础集合类(NSArray,NSSet,NSOrderedSet,NSDictionary,NSMapTable,NSHashTable, NSPointerArra
- NSMapTable 不只是一个能放weak指针的 NSDictionary
- IOS 的NSSet,NSHashMap,NSHashTable,NSPointerArray集合类
- Java 线程
- logger(二):linux下syslog & syslog-ng 详解
- c++宽字符串、窄字符串 互转
- Ajax常见面试题
- ZXing生成条码二维码并输出到web页面的示例
- NSHashTable 和 NSMapTable的学习
- 多方位全面解析:如何正确地写好一个界面
- IOS上 关于状态栏的相关设置(UIStatusBar)
- 6.php职责链
- Android开发中集成protobuf协议
- CustomAnim自定义动画
- plupload 添加图片尺寸验证
- 一个C程序的编译过程(Linux环境下GCC)
- NSArray是强引用容器 详解