ios NSHashTable & NSMapTable
在ios开发中大家用到更多的集合类可能是像NSSet或者NSDictionary,NSArray这样的。这里要介绍的是更少人使用的两个类,一个是NSMapTable,另一个是NSHashTable。
NSHashTable
NSHashTable看上去就像NSSet的替代品,对比NSSet/NSMutableSet,NSHashTable有以下的特性:
- NSSet/NSMutableSet 拥有所包含对象的strong refrence。
- NSHashTable是mutable可变的,没有不可变的类。
- NSHashTable可以拥有成员的weak refrence;
- NSHashTable可以在输入的时候copy成员。
- NSHashTable可以包含任意的指针,可以使用指针去比较或者hash校验。
NSHashTable在初始化的时候可以传入一个参数option,有以下几种选项
- NSHashTableStrongMemory: Equal to NSPointerFunctionsStrongMemory. This is the default behavior, equivalent to NSSet member storage.
- NSHashTableWeakMemory: Equal to NSPointerFunctionsWeakMemory. Uses weak read and write barriers. Using NSPointerFunctionsWeakMemory, object references will turn to NULL on last release.
- NSHashTableZeroingWeakMemory: This option has been deprecated. Instead use the NSHashTableWeakMemory option.
- NSHashTableCopyIn: Use the memory acquire function to allocate and copy items on input (see NSPointerFunction -acquireFunction). Equal to NSPointerFunctionsCopyIn.
- NSHashTableObjectPointerPersonality: Use shifted pointer for the hash value and direct comparison to determine equality; use the description method for a description. Equal to NSPointerFunctionsObjectPointerPersonality.
NSMapTable
NSMapTable和NSDictionary有点类似,和dictionary相比,它有以下的特性:
- NSDictionary和NSMutableDictionary会copy keys(这也是导致他们构造的时候性能相对低一点的原因),还会持有object的strong引用。
- NSMapTable也都是mutable的,没有不可变类型。
- NSMapTable也可以在input的时候copy它的值。
- NSMapTable能包含任意指针,用指针来进行比较或者hash校验。
类似的NSMapTable也有一个option参数来初始化,有以下几种选项
- NSMapTableStrongMemory: Specifies a strong reference from the map table to its contents.
- NSMapTableWeakMemory: Uses weak read and write barriers appropriate for ARC or GC. Using NSPointerFunctionsWeakMemory, object references will turn to NULL on last release. Equal to NSMapTableZeroingWeakMemory.
- NSHashTableZeroingWeakMemory: This option has been superseded by the NSMapTableWeakMemory option.
- NSMapTableCopyIn: Use the memory acquire function to allocate and copy items on input (see acquireFunction (see NSPointerFunction -acquireFunction). Equal to NSPointerFunctionsCopyIn.
- NSMapTableObjectPointerPersonality: Use shifted pointer hash and direct equality, object description. Equal to NSPointerFunctionsObjectPointerPersonality.
这里有一些关于集合类的参考链接:
- http://nshipster.com/nshashtable-and-nsmaptable/
- http://www.cocoawithlove.com/2008/08/nsarray-or-nsset-nsdictionary-or.html
- http://www.cocoawithlove.com/2008/07/nsmaptable-more-than-nsdictionary-for.html
ios NSHashTable & NSMapTable的更多相关文章
- NSHashtable and NSMaptable
本文转自Nidom的博客,原文:<NSHashtable & NSMaptable> NSSet, NSDictionary, NSArray是Foundation框架关于集合 ...
- 【转】NSHashtable and NSMaptable
本文转自Nidom的博客,原文:<NSHashtable & NSMaptable> NSSet, NSDictionary, NSArray是Foundation框架关于集合 ...
- NSDictionary和NSMaptable, NSArray,NSSet,NSOrderedSet和NSHashTable的区别
NSSet, NSDictionary, NSArray是Foundation框架关于集合操作的常用类, 和其他标准的集合操作库不同, 他们的实现方法对开发者进行隐藏, 只允许开发者写一些简单的代码, ...
- [转][iOS]NSHashTable & NSMapTable
NSSet and NSDictionary, along with NSArray are the workhorse collection classes of Foundation. Unlik ...
- iOS 开发知识小集(1)
iOS 开发知识小集(1) 2015-05-15 iOS大全 (点击上方蓝字,快速关注我们) 一直想做这样一个小册子,来记录自己平时开发.阅读博客.看书.代码分析和与人交流中遇到的各种问题.之前有过 ...
- [转] NSMapTable 不只是一个能放weak指针的 NSDictionary
NSMapTable 不只是一个能放weak指针的 NSDictionary NSMapTable是早在Mac OS X 10.5(Leopard)的引入集合类.乍一看,这似乎是作为一个替换NSDic ...
- 《ARC以及非ARC的讨论》
ARC的机制是什么?它在那里放入retain/release函数调用? 请停止思考这些问题,把更多的精力放在下面的问题上,比如你的程序逻辑,对象的强,弱引用,对象的所属关系,可能的循环引用等问题上. ...
- 转向ARC的说明
转自hherima的博客原文:Transitioning to ARC Release Notes(苹果官方文档) ARC是一个编译器特征,它提供了对OC对象自动管理内存.ARC让开发者专注于感兴趣的 ...
- Cocoa 集合类型:NSPointerArray,NSMapTable,NSHashTable
iOS 中有很多种集合类型,最为常见的可能就 NSArray.NSDictionary.NSSet,但其实还有 NSPointerArray.NSMapTable.NSHashTable 等类型,虽然 ...
随机推荐
- Unity3d 巫师3Ciri的渲染
--wolf96 16/10/6
- Java笔记(十一)……单例设计模式
设计模式 解决某一类问题最行之有效的方法 Java中有23中设计模式 单例设计模式 解决一个类在内存中只存在一个对象 思路 将构造函数私有化 在类中创建一个本类对象 提供一个方法可以获取到对象 两种方 ...
- 使用Cross-validation (CV) 调整Extreme learning Machine (ELM) 最优参数的实现(matlab)
ELM算法模型是最近几年得到广泛重视的模型,它不同于现在广为火热的DNN. ELM使用传统的三层神经网络,只包含一个隐含层,但又不同于传统的神经网络.ELM是一种简单易用.有效的单隐层前馈神经网络SL ...
- HW3.10
public class Solution { public static void main(String[] args) { int number1 = (int)(Math.random() * ...
- HDU1075 - What Are You Talking About(Trie树)
题目大意 给定一些火星文单词以及对应的英语单词,然后给你一些火星文,要求你翻译成对应的英文 题解 第一次写Trie树! 把所有火星文单词插入到Trie树中,并且每个火星文单词结尾的节点记录相应英文单词 ...
- Re-enable Alcatraz on Xcode 6.3.2 or newer
I’ve been using Alcatraz to manage Xcode plug-ins for some time now. After updating to Xcode 6.3.2 a ...
- Java 线程池详细介绍
根据摩尔定律(Moore’s law),集成电路晶体管的数量差不多每两年就会翻一倍.但是晶体管数量指数级的增长不一定会导致 CPU 性能的指数级增长.处理器制造商花了很多年来提高时钟频率和指令并行.在 ...
- 在Windows8工作站上安装可靠多播协议
为什么要安装可靠多播协议? 答:随着因特网的发展,出现了视频点播.电视会议.远程学习.计算机协同工作等新业务.传统的点到点通信方式,不仅浪费大量的网络带宽,而且效率很低.一种有效利用现有带宽的技术 ...
- What does enumerable mean?
I was directed to MDN's for..in page when it said, "for..in Iterates over the enumerable proper ...
- [一]java环境变量的配置
1.JAVA_HOME(新建):D:\jdk1.6 2.classpath(新建): .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar; 3.path(新增):% ...