Objective-C NSData/NSMutableData

Posted 懒虫哥哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Objective-C NSData/NSMutableData相关的知识,希望对你有一定的参考价值。

创建于完成: 2018/02/06

 


总览: http://www.cnblogs.com/lancgg/p/8404975.html 

 数据类 
 简介

 处理比特列

 Foundation/NSData.h 

 (1)

 生成

 

 - (id) initWithBytes: (const void *) bytes length: (NSUInteger) length

 便利的构造函数:

 dataWithBytes:length:

 以bytes为起点长度length的数据来初始化

 是copy,不是原来对象

 - (id) initWithBytesNoCopy: (void *) bytes

            length: (unsigned) length

       freeWhenDone: (BOOL) flag

 便利的构造函数:

 dataWithBytesNoCopy:length:freeWhenDone:

 以bytes为起点长度length的数据来初始化 

 不是copy,是原来对象

 flag: YES 自动释放, bytes必须有malloc等生成

         NO 手动释放

 - (id) initWithData: (NSData *) aData

 便利的构造函数:

 dataWithData:

 从aData生成

 aData可以使NSMutableData的实例, 从可变生成不变

 + (id) data

 相当于 [[NSData alloc] init];

 生成长度0的空的NSData实例

 主要用于NSMutableData, 对应init

   

 

 (2)

 获取

  

 - (NSUInteger) length  获取比特列长度
 - (const void *) bytes  获取比特列开头的指针

 - (void) getBytes: (void *) buffer length: (NSUInteger) length

 获取开头开始长度length的比特列

 - (NSData *) subdataWithRange: (NSRange) range

 - (void) getBytes: (void) buffer range: (NSRange) range

 获取range范围的数据

 把range范围的数据写入buffer

 - (NSRange) rangeOfData: (NSData *) dataToFind

             options: (NSDataSearchOptions) mask

           range: (NSRange) searchRange

 在searchRange范围内寻找dataToFind,找到

 返回NSRange类数据。

 NSDataSearchOptions可以指定逆序查找等

 dataToFind不可以是nil

   
   
   

 

 (3)

 比较 

 

 - (BOOL) isEqualToData: (id) anObject  受体的data和anObject内容一致,长度一致时返回YES
   

 

 (4)

 文件输入输出 

  

 - (NSString *) description  把data的内容以property list形式生成字符串并返回

 - (id) initWithContentsOfFile: (NSString *) path

            options: (NSUInteger) mask

               error: (NSError **) errorPtr

 便利的构造函数:

 dataWithContentsOfFile:options:error:

 读取path文件,作为比特列来初始化

 失败的话受体自动释放,变成nil, errorPtr装入详细错误信息

 mask: 是否使用虚拟内存等? # TODO: check [mask内容?]

 - (id) initWithContentsOfFile: (NSString *) path

 便利的构造函数:

 dataWithContensOfFile:

 上一个的第二,三参数自动指定为0, NULL

 - (BOOL) writeToFile: (NSString *) path

                atomically: (BOOL) flag

 把受体的比特列写入path指定的文件里,成功返回YES

 flag: YES 写入在临时文件,成功后重命名为指定文件 (失败不影响原文件)  

   
   
   
   
   
   

 

NSMutableData 

 NSData的子类

 Foundation/NSData.h

 (1)

 生成

 

 - (id) initWithCapacity: (NSUInteger) capacity

 便利的构造函数:

 dataWithCapacity

 指定容量来生成, 不够了自动增加

 也可以直接init, 也就是容量为0

 - (id) initWithLength: (NSUInteger) capacity

 便利的构造函数:

 dataWithLength:

 指定比特列长度来生成, 全部比特位用0来填
   
   
   

 

 (2)

 获取

 

 - (void *) mutableBytes

 获取比特列

 长度为0时返回NULL

 和bytes的不同在于获取的比特列可以被改写

   
   

 

 (3)

 增加

  

 - (void) appendData: (NSData *) otherData  在受体的比特列末尾添加上otherData(copy)

 - (void) appendBytes: (const void *) bytes

         length: (NSUInteger) length

 复制bytes开头到指定长度的比特列到受体末尾

 # TODO: check [长度超过bytes时候是什么处理]

   

 

 (4)

 变更

 

 - (void) replaceByBytesInRange: (NSRange) range

            withBytes: (const void *) replacementBytes

               length: (NSUInteger) replacementLength

 用replacementBytes替换range指定的范围

 replacementLength是替换的新字符串的长度

 range的长度和replacementLength不同的话,比特列长度自动变化。

 range的长度为0时为location后插入

 - (void) replaceBytesInRange: (NSRange) range

                             withBytes: (const void *) bytes

  用bytes替换range指定范围的数据

 相当于上一个的replacementLength和range的length相同的情况

 - (void) setData: (NSData *) aData  用aData的内容设置受体
 - (void) resetBytesInRange: (NSRange) range  用0重置指定范围的比特列
   

 

 (5)

 改变比特列长度

 

 - (void) increaseLengthBy: (NSUInteger) extraLength

 增加指定长度

 增加部分都自动用0填埋

 - (void) setLength: (NSUInteger) length

 设定比特列长度为length

 拉伸的时候,增加部分自动用0填埋

   

 

 

   
   
   
   

以上是关于Objective-C NSData/NSMutableData的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3.0 令人兴奋,但Objective-C也有小改进--Objective-C的类属性

如何在c++中,调用objective-c

1了解Objective-C语言的起源

Objective-C 和 C++ 的区别有哪些?

Objective-C中的Hello World

C++和Objective-C混编(官方文档翻译)