创建于完成: 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的更多相关文章

  1. NSData NSDate NSString NSArray NSDictionary 相互转换

    // NSData NSDate NSString NSArray NSDictionary json NSString *string = @"hello word"; NSDa ...

  2. NSData和NSString 、 NSFileManager

    1 NSData和NSMutableData的基本使用 1.1 问题 NSData类是IOS提供的用于以二进制的形式操作文件数据的类,NSData有两个常用的属性length和bytes,length ...

  3. NSData、NSString 、 NSFileManager

      1 NSData和NSMutableData的基本使用 1.1 问题 NSData类是IOS提供的用于以二进制的形式操作文件数据的类,NSData有两个常用的属性length和bytes,leng ...

  4. NSData NSDate NSString NSArray NSDictionary 相互转化

    //    NSData  NSDate NSString NSArray NSDictionary json NSString *string = @"hello word"; ...

  5. iOS之数据持久化方案

    概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) ...

  6. iOS的数据持久化

    所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) pr ...

  7. iOS中plist的创建,数据写入与读取

    iOS中plist的创建,数据写入与读取 Documents:应用将数据存储在Documents中,但基于NSuserDefaults的首选项设置除外Library:基于NSUserDefaults的 ...

  8. UI:数据持久化

    数据持久化    参考1  参考2  参考3 什么是数据持久化,就是将文件保存在本地的硬盘中,使得应用程序或者机器重启后可以继续访问以前保留的数据.IOS开发中有许多的数据持久化方案. 如下面五种方案 ...

  9. ios十进制、十六进制字符串,byte,data等之间的转换

    十进制->十六进制 Byte bytes[]={0xA6,0x27,0x0A}; NSString *strIdL  = [NSStringstringWithFormat:@"%@& ...

随机推荐

  1. 如何改变linux系统的只读文件的权限

    vim 编辑可以在命令模式输入 :wq! 保存退出可以用chmod 命令修改文件权限. chmod命令是非常重要的,用于改变文件或目录的访问权限.用户用它控制文件或目录的访问权限.该命令有两种用法.一 ...

  2. Netty 4.0 新的特性及需要注意的地方

    Netty 4.0 新的特性及需要注意的地方 这篇文章和你一起过下Netty的主发行版本的一些显著的改变和新特性,让你在把你的应用程序转换到新版本的时候有个概念. 项目结构改变 Netty的包名从or ...

  3. Spring基础入门(二)

    一.AOP 1.AOP概念 aop:面向切面编程,扩展功能不修改源代码实现. AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码. 2.AOP原理 (1)第一种情况,有接口情况,使用动态代理创建 ...

  4. NodeJS+MongoDB+AngularJS+Bootstrap书店示例

    目录 一.Bootstrap 1.1.添加引用 1.2.在页面中使用BootStrap 1.3.可视化布局 二.使用MongoDB创建数据库 2.1.启动MongoDB数据库 2.2.启动数据库GUI ...

  5. [WinForm]DataGridView列头右键菜单

    [WinForm]DataGridView列头右键菜单 前言 继续"不误正业" - - #,记录一下.有时候有这样的需求:DataGridView的列头菜单可以选择具体显示哪些列, ...

  6. Windows环境下QWT安装及配置

    ** 1.QWT下载路径 **:https://sourceforge.net/projects/qwt/ 主要下载这三个文件:qwt-6.1.2.zip.qwt-6.1.2.pdf,qwt-6.1. ...

  7. Handlebars.js 中文文档

    Home  »  前端   »   Handlebars.js 中文文档 Handlebars.js 中文文档 Posted in 前端 By KeenWon On 2014年4月3日 Views:  ...

  8. How to: Use Submix Voices

    How to: Use Submix Voices:https://msdn.microsoft.com/en-us/library/windows/desktop/ee415794(v=vs.85) ...

  9. 为什么java构造函数的构造器只能在第一行写this() 或者super() ?

    最近在看内部类, 但是被“为什么匿名内部类或者局部内部类使用方法的局部变量时, 局部变量一定得是final类型”困扰着, 在网上查找资料的时候, 发现我对类初始化完全不了解, 之前的认识都是错误! 所 ...

  10. 为Html.EditorForModel自定义模版

    对于MVC视图渲染来说,大家应该不会陌生,但对于模型的渲染,不知道是否听说过,主要是说Model通过它属性的相关特性(DataType,UIHint)来将它们自动渲染到View上,这是一个比较不错的技 ...