2012-11-03 24 views
0

我必须处理XML,现在使用NSInputStream打破我的代码,因为我必须重写很多东西。NSData dataWithContentsOfFile vs NSInputStream

将dataWithContentsOfFile整个文件放入内存中,还是只读取请求getBytes方法的内容?

我正在使用NSData作为NSXMLParser的输入参数,不知有没有关于此的任何文档?

没有关于苹果文档关于NSData的dataWithContentsOfFile或其实现的内部的文档。

+0

请看这封邮件对话http://lists.apple.com/archives/cocoa-dev/2012/May/msg00765.html。因为你更关心二进制处理,请看https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/BinaryData/BinaryData.html#//apple_ref/doc/uid/10000037i。 –

+0

@SudeshKumar,请阅读这个问题,没有提供任何关于将整个文件加载到内存中的链接。 –

+0

'[NSData dataWithContentsOfFile:...]'一次读取整个文件。 –

回答

0

为NSXMALParser分配NSData时,意味着要为该对象创建数据缓冲区,并且每个对象都占用内存(RAM),因为iPhone IOS非常清楚如何使用虚拟内存。当您从文件中读取完整数据时,它将占用对象数据,并且如果数据大小超过几个(取决于操作系统算法)内存页,则该对象使用虚拟内存管理。无论数据如何分配,数据对象也可以包装已有的数据。该对象不包含有关数据本身的信息(如其类型);决定如何使用数据的责任在于客户。特别是,它不会处理在big-endian和little-endian机器之间分配的字节顺序交换。
我建议你再读一遍这个链接 https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/BinaryData/BinaryData.html#//apple_ref/doc/uid/10000037i它与iOS相关。但是有一件事与你有关......在IOS中有对象所有者的类型。一个是用户,另一个是IOS对象。如果你创建NSData,这意味着你分配内存缓冲区和分配数据指针到这个veriable,但在那一刻,整个数据驻留在内存中。它是我们的假设,但在此期间,IOS知道如何处理这种情况。 IOS使用虚拟内存技术来处理数据页面。