创建于完成: 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. 内存管理——(exceptional C++ 条款9,条款10)

    C++的各个内存区域: (1)常量数据(const data)区 常量数据区存储的是字符串等在编译期间就能确定的值,在整个程序的生命周期内,这里的数据都是可用.区域内所有的数据都是 只读的. (2)栈 ...

  2. 从零开始写STL—模板元编程之tuple

    tuple Class template std::tuple is a fixed-size collection of heterogeneous values. It is a generali ...

  3. 2887 Big String

    splay瞎搞一下,正解是分块数组或分块链表,但是学不会啊! #include<cstdio> #include<cstdlib> #include<iostream&g ...

  4. Weblogic性能优化(图解)

    分类:Weblogic (2034) (1) 若是觉得对您有一丢丢的帮助,烦请顶一下哦,激励我码出更多的帖子,^_^谢谢! 1.数据源性能优化 1.1连接池参数配置 登录weblogic控制台,占击“ ...

  5. 从ASP.NET Core 3.0 preview 特性,了解CLR的Garbage Collection

    前言 在阅读这篇文章:Announcing Net Core 3 Preview3的时候,我看到了这样一个特性: Docker and cgroup memory Limits We conclude ...

  6. Java SpringMVC实现PC端网页微信扫码支付完整版

    一:前期微信支付扫盲知识 前提条件是已经有申请了微信支付功能的公众号,然后我们需要得到公众号APPID和微信商户号,这个分别在微信公众号和微信支付商家平台上面可以发现.其实在你申请成功支付功能之后,微 ...

  7. c++之NVI手法

    non-virtual interface(NVI)手法:令用户通过public non-virtual成员函数间接调用private virtual函数,将这个non-virtual函数称为virt ...

  8. Promise编程规范

    参考: http://www.cnblogs.com/dojo-lzz/p/4340897.html 闲话promise机制  http://www.cnblogs.com/lvdabao/p/es6 ...

  9. 有关java构造器的笔记

    当程序中首次出现使用一个类A时, 无论是使用A的静态成员还是创建一个对象(声明一个A类对象不算), 那么类加载器就会首先对A进行加载, 在对A进行加载的过程中, 如果A有一个extends的父类B, ...

  10. wget和curl

    1 curl比wget支持更多的协议 2 wget是支持递归的,而curl不支持