www.MyException.Cn  网友分享于:2015-04-24  浏览:0次
 
NSData全部API学习。

学习NSData,在网上找资料竟然都是拷贝的纯代码,没人去解释。在这种网上没资料的情况下,整理这个API文件好难,好艰辛。在这贡献给大家了,么么哒~示例程序用红色标注。

/****************        Base 64 Options
****************/

/*** Base64是
一组二进制到文本转化的方案,以ASSCII格式表示二进制数据,这些方案用来编码二进制数据以存储或者通过把多媒体文件转换成文本数据进行传输,这个能
保证数据在传输的过程中的完整性。Base64醉常见的用于是处理电子邮件附件,或者解码小图片。在iOS7之前,Base64的编码和解码是需要自己实
现的或者是使用第三方库,但是现在苹果提供一些API来实现Base64功能 ***/

//4.base64编码中的一些设置选择

typedef
NS_OPTIONS(NSUInteger, NSDataBase64EncodingOptions) {

NSDataBase64Encoding64CharacterLineLength =
1UL << 0,

NSDataBase64Encoding76CharacterLineLength =
1UL << 1,

NSDataBase64EncodingEndLineWithCarriageReturn =
1UL << 4,

NSDataBase64EncodingEndLineWithLineFeed =
1UL << 5,

} NS_ENUM_AVAILABLE(10_9,
7_0);

//5.base64在解码过程中的option可选条件,下面选项表示在将诶吗过程中忽略不能识别的字节

typedef
NS_OPTIONS(NSUInteger, NSDataBase64DecodingOptions) {

NSDataBase64DecodingIgnoreUnknownCharacters =
1UL << 0

} NS_ENUM_AVAILABLE(10_9,
7_0);

/**************** Immutable Data
不可变的Data
****************/

@interface NSData :
NSObject <NSCopying,
NSMutableCopying, NSSecureCoding>

//6.获取data长度的属性

@property (readonly)
NSUInteger length;

//7.返回data对象的首指针

@property (readonly)
const void *bytes
NS_RETURNS_INNER_POINTER;

@end

@interface NSData (NSExtendedData)

//8.返回一个ASCII编码格式的字符串,采用的格式是data属性列表的格式。

@property (readonly,
copy) NSString *description;

//9.取出data中指定长度的字节存入buffer这个提前声明的数组中

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

//9.取出data中指定位置range的字节存入buffer这个提前声明的数组中

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

//10.判断两个data是否相等

- (BOOL)isEqualToData:(NSData *)other;

//11.截图data指定位置的子data

- (NSData *)subdataWithRange:(NSRange)range;

//12.将data写入指定的文件

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;

//13.将data写入指定的url

- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;

//14.将data写入指定文件,并且有写入过程的设置条件,带错误信息

- (BOOL)writeToFile:(NSString *)path options:(NSDataWritingOptions)writeOptionsMask
error:(NSError **)errorPtr;

//15.将data写入指定的url,并且有写入过程的设置条件,带错误信息

- (BOOL)writeToURL:(NSURL *)url options:(NSDataWritingOptions)writeOptionsMask
error:(NSError **)errorPtr;

//16.搜索在data1内部存在data2的位置,并且有搜索配置条件,并且可加入搜索的范围

- (NSRange)rangeOfData:(NSData *)dataToFind options:(NSDataSearchOptions)mask
range:(NSRange)searchRange
NS_AVAILABLE(10_6,
4_0);

//17.列举遍历字典的方法

- (void) enumerateByteRangesUsingBlock:(void (^)(const
void *bytes, NSRange byteRange,
BOOL *stop))block
NS_AVAILABLE(10_9,
7_0);

@end

/*** 创建data的所有相关方法作为一个类别几种到一块 ***/

@interface NSData (NSDataCreation)

//18.data的快速创建办法

+ (instancetype)data;

//19.赋值以bytes开头,长度为length的数据,进行初始化使其成为数据对象的内容

+ (instancetype)dataWithBytes:(const
void *)bytes length:(NSUInteger)length;

//20.这个方法生成的data中保存的是指向数据的指针,并没有对数据进行复制操作。

+ (instancetype)dataWithBytesNoCopy:(void *)bytes length:(NSUInteger)length;

//21.这个方法生成的data中
保存的是指向数据的指针,并没有对数据进行复制操作。当flag为yes的时候,生成的data对象是bytes的所有者,当data对象被释放的时候也
会同时释放bytes,所以bytes必须是通过malloc在堆上分配的内存。当flag为no的时候,bytes不会被自动释放,释放bytes时要
注意时机,不要再data对象还被使用的时候释放bytes。

+ (instancetype)dataWithBytesNoCopy:(void *)bytes length:(NSUInteger)length
freeWhenDone:(BOOL)b;

//22.加载file文件,并且有可选择读取文件的选项配置条件,带有错误信息

+ (instancetype)dataWithContentsOfFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask
error:(NSError **)errorPtr;

//23.加载url,并且有可选择读取文件的选项配置条件,带有错误信息

+ (instancetype)dataWithContentsOfURL:(NSURL *)url options:(NSDataReadingOptions)readOptionsMask
error:(NSError **)errorPtr;

//24.从参数path指定的文件读入二进制数据,用该数据初始化NSData对象。

+ (instancetype)dataWithContentsOfFile:(NSString *)path;

//25.从参数path指定的url读入,用该数据初始化NSData对象。

+ (instancetype)dataWithContentsOfURL:(NSURL *)url;

//26.赋值以bytes开头,长度为length的数据,进行初始化使其成为数据对象的内容

- (instancetype)initWithBytes:(const
void *)bytes length:(NSUInteger)length;

//27.这个方法生成的data中保存的是指向数据的指针,并没有对数据进行复制操作。

- (instancetype)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length;

//28.这个方法生成的data中
保存的是指向数据的指针,并没有对数据进行复制操作。当flag为yes的时候,生成的data对象是bytes的所有者,当data对象被释放的时候也
会同时释放bytes,所以bytes必须是通过malloc在堆上分配的内存。当flag为no的时候,bytes不会被自动释放,释放bytes时要
注意时机,不要再data对象还被使用的时候释放bytes。

- (instancetype)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length
freeWhenDone:(BOOL)b;

//29.

- (instancetype)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length
deallocator:(void (^)(void *bytes,
NSUInteger length))deallocator
NS_AVAILABLE(10_9,
7_0);

//30.从参数path指定的文件读入二进制数据,用该数据初始化NSData对象。如果读取文件失败,则释放调用者并返回nil,同时把错误信息写入指针errorPtr。mask是一个选项信息,用于指定是否使用虚拟内存等。

- (instancetype)initWithContentsOfFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask
error:(NSError **)errorPtr;

//31.从参数url指定的路径中读入,用该数据初始化NSData对象。如果读取文件失败,则释放调用者并返回nil,同时把错误信息写入指针errorPtr。mask是一个选项信息,用于指定是否使用虚拟内存等。

- (instancetype)initWithContentsOfURL:(NSURL *)url options:(NSDataReadingOptions)readOptionsMask
error:(NSError **)errorPtr;

//32.加载flie文件路径

- (instancetype)initWithContentsOfFile:(NSString *)path;

//33.加载url

- (instancetype)initWithContentsOfURL:(NSURL *)url;

//34.用指定的NSData对象aData来创建一个新的NSData对象,参数可以是NSMutableData对象。

- (instancetype)initWithData:(NSData *)data;

//35.用指定的NSData对象aData来创建一个新的NSData对象,参数可以是NSMutableData对象。

+ (instancetype)dataWithData:(NSData *)data;

@end

/*** base64方案编码分类 
iOS7之后苹果给出以下四个API供实现base64方案
头两个是处理字符串的,后两个是处理UTF-8编码数据的,这两个承兑的方法功能是一样的,但是有时候用其中一个比另一个效率要高。如果你像要bae64
编码字符串然后写进文件,你应该使用UTF-8编码数据的这对方法。如果你打算base64编码字符串之后用作json,你应该使用另外一对方法
编码解码一一对应***/

@interface NSData (NSDataBase64Encoding)

//36.解码。将已经base64编码之后的字符串数据再转化为NSData数据,

- (instancetype)initWithBase64EncodedString:(NSString *)base64String options:(NSDataBase64DecodingOptions)options
NS_AVAILABLE(10_9,
7_0);

//37.编码。将一个data数据利用base64方案转化成base64之后的NSString字符串

- (NSString *)base64EncodedStringWithOptions:(NSDataBase64EncodingOptions)options
NS_AVAILABLE(10_9,
7_0);

//38.解码。将已经base64编码之后的NSData数据再转化为NSData数据

- (instancetype)initWithBase64EncodedData:(NSData *)base64Data options:(NSDataBase64DecodingOptions)options
NS_AVAILABLE(10_9,
7_0);

//39.编码.将一个data数据利用base64方案转化成base64之后的NSData数据

- (NSData *)base64EncodedDataWithOptions:(NSDataBase64EncodingOptions)options
NS_AVAILABLE(10_9,
7_0);

示例程序:使用第一对编码解码API。

NSString * stringExample = [NSString stringWithFormat:@"I Love You"];

NSData * data1 = [stringExample dataUsingEncoding:NSUTF8StringEncoding];

NSString * base64String   = [data1 base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];

NSLog(@"Base64-encoded string is %@",base64String);

//log(Base64-encoded string is SSBMb3ZlIFlvdQ==);

NSData * dataFromString = [[NSData alloc]
initWithBase64EncodedString:base64String
options:NSDataBase64DecodingIgnoreUnknownCharacters];

NSLog(@"string is %@",[NSString stringWithUTF8String:[dataFromString bytes]]);

//log(string is I Love You);

@end

/**************** Mutable Data
可变data
****************/

@interface NSMutableData :
NSData

//40.可变data的可变字节

@property (readonly)
void *mutableBytes
NS_RETURNS_INNER_POINTER;

//41.可变data的长度

@property NSUInteger length;

@end

@interface NSMutableData (NSExtendedMutableData)

//42.给可变data追加字节

- (void)appendBytes:(const
void *)bytes length:(NSUInteger)length;

//43.给data追加其他的data

- (void)appendData:(NSData *)other;

//44.为已经存在的data追加新的长度

- (void)increaseLengthBy:(NSUInteger)extraLength;

示例程序:

NSMutableData * data = [NSMutableData data];

[data increaseLengthBy:5];

NSLog(@"dataLength———%lu",(unsigned long)data.length);

//45.给data替换对应位置的字节

- (void)replaceBytesInRange:(NSRange)range withBytes:(const
void *)bytes;

//46.重置可变data对应位置的字节

- (void)resetBytesInRange:(NSRange)range;

//47.为可变data设置data数据

- (void)setData:(NSData *)data;

//48.给data替换对应位置的字节, 并且存在替换长度

- (void)replaceBytesInRange:(NSRange)range withBytes:(const
void *)replacementBytes length:(NSUInteger)replacementLength;

@end0

@interface NSMutableData (NSMutableDataCreation)

//49.动态创建可变data
并且初始化指定大小

+ (instancetype)dataWithCapacity:(NSUInteger)aNumItems;

//50.动态创建可变data
并且初始化指定长度

+ (instancetype)dataWithLength:(NSUInteger)length;

//51.静态创建可变data
并且初始化指定大小

- (instancetype)initWithCapacity:(NSUInteger)capacity;

//52.静态创建可变data
并且初始化指定长度

- (instancetype)initWithLength:(NSUInteger)length;

@end

//1.data读取过程的可选配置条件

typedef
NS_OPTIONS(NSUInteger, NSDataReadingOptions) {

NSDataReadingMappedIfSafe =  
1UL << 0,
    NSDataReadingUncached = 1UL <<
1,

NSDataReadingMappedAlways
NS_ENUM_AVAILABLE(10_7,
5_0) = 1UL <<
3,

NSDataReadingMapped = NSDataReadingMappedIfSafe,
// Deprecated name for NSDataReadingMappedIfSafe

NSMappedRead = NSDataReadingMapped,
// Deprecated name for NSDataReadingMapped

NSUncachedRead = NSDataReadingUncached
// Deprecated name for NSDataReadingUncached

};

//2.data写入过程的可选配置条件

typedef
NS_OPTIONS(NSUInteger, NSDataWritingOptions) {

NSDataWritingAtomic =
1UL << 0,

NSDataWritingWithoutOverwriting
NS_ENUM_AVAILABLE(10_8,
6_0) = 1UL <<
1,

NSDataWritingFileProtectionNone
NS_ENUM_AVAILABLE_IOS(4_0)                                  =
0x10000000,

NSDataWritingFileProtectionComplete
NS_ENUM_AVAILABLE_IOS(4_0)                              =
0x20000000,

NSDataWritingFileProtectionCompleteUnlessOpen
NS_ENUM_AVAILABLE_IOS(5_0)                    =
0x30000000,

NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication
NS_ENUM_AVAILABLE_IOS(5_0)  =
0x40000000,

NSDataWritingFileProtectionMask
NS_ENUM_AVAILABLE_IOS(4_0)                                  =
0xf0000000,

NSAtomicWrite =
NSDataWritingAtomic

};

/**************** Data Search Options
****************/

//3.data在搜索过程中的可选配置条件

typedef
NS_OPTIONS(NSUInteger, NSDataSearchOptions) {

NSDataSearchBackwards =
1UL << 0,

NSDataSearchAnchored =
1UL << 1

} NS_ENUM_AVAILABLE(10_6,
4_0);

/*** 下方为已废弃代码,不多做解释 ***/

@interface NSData (NSDeprecated)

- (void)getBytes:(void *)buffer
NS_DEPRECATED(10_0,
10_10,
2_0, 8_0,
"This method is unsafe because it could potentially cause buffer overruns. Use -getBytes:length: instead.");

+ (id)dataWithContentsOfMappedFile:(NSString *)path
NS_DEPRECATED(10_0,
10_10,
2_0, 8_0,
"Use +dataWithContentsOfURL:options:error: and NSDataReadingMappedIfSafe or NSDataReadingMappedAlways instead.");

- (id)initWithContentsOfMappedFile:(NSString *)path 
NS_DEPRECATED(10_0,
10_10,
2_0, 8_0,
"Use -initWithContentsOfURL:options:error: and NSDataReadingMappedIfSafe or NSDataReadingMappedAlways instead.");

- (id)initWithBase64Encoding:(NSString *)base64String
NS_DEPRECATED(10_6,
10_9, 4_0,
7_0);

- (NSString *)base64Encoding
NS_DEPRECATED(10_6,
10_9, 4_0,
7_0);

@end

/****************     Purgeable Data
****************/

NS_CLASS_AVAILABLE(10_6,
4_0)

@interface NSPurgeableData :
NSMutableData <NSDiscardableContent> {

@private

NSUInteger _length;

int32_t _accessCount;

uint8_t _private[32];

void *_reserved;

}

@end

NSData所有API学习的更多相关文章

  1. Openstack api 学习文档 & restclient使用文档

    Openstack api 学习文档 & restclient使用文档 转载请注明http://www.cnblogs.com/juandx/p/4943409.html 这篇文档总结一下我初 ...

  2. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  3. Openstack python api 学习文档 api创建虚拟机

    Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...

  4. Windows录音API学习笔记(转)

    源:Windows录音API学习笔记 Windows录音API学习笔记 结构体和函数信息  结构体 WAVEINCAPS 该结构描述了一个波形音频输入设备的能力. typedef struct { W ...

  5. Node.js API 学习笔记

    常用 API 学习笔记 url 函数 url.parse: 解析 url 地址 url.resolve: 向 url 地址添加或替换字段 url.format: 生成 url 地址 querystri ...

  6. 框架源码系列十一:事务管理(Spring事务管理的特点、事务概念学习、Spring事务使用学习、Spring事务管理API学习、Spring事务源码学习)

    一.Spring事务管理的特点 Spring框架为事务管理提供一套统一的抽象,带来的好处有:1. 跨不同事务API的统一的编程模型,无论你使用的是jdbc.jta.jpa.hibernate.2. 支 ...

  7. RESTful API 学习

    /********************************************************************************* * RESTful API 学习 ...

  8. Windows录音API学习笔记

    Windows录音API学习笔记 结构体和函数信息  结构体 WAVEINCAPS 该结构描述了一个波形音频输入设备的能力. typedef struct { WORD      wMid; 用于波形 ...

  9. 从零开始搭建.NET Core 2.0 API(学习笔记一)

    从零开始搭建.NET Core 2.0 API(学习笔记一) 一. VS 2017 新建一个项目 选择ASP.NET Core Web应用程序,再选择Web API,选择ASP.NET Core 2. ...

随机推荐

  1. Bad Request (Invalid Hostname)什么意思? 200

    一般来说与你电脑无关 错误请求(无效主机名) 域名已绑定主机 但主机未绑定域名就会出现这种情况! 总结页面出现Bad Request (Invalid Hostname)的原因: 1.如果确定域名已经 ...

  2. navicat将多个表导出为一个sql文件

    1.shift选中多个表 2右键选择--转储sql文件---结构和数据

  3. 利用光场进行深度图估计(Depth Estimation)算法之一——聚焦算法

    前面几篇博客主要说了光场相机,光场相机由于能够记录相机内部整个光场,可以实现重聚焦(模糊线索)和不同视角的变换(视差线索),同时也可以利用这个特性进行深度估计(Depth Estimation). 先 ...

  4. pjax 笔记

    PJAX的基本思路是,用户点击一个链接,通过ajax更新页面变化的部分,然后使用HTML5的pushState修改浏览器的URL地址,这样有效地避免了整个页面的重新加载.如果浏览器不支持history ...

  5. [知了堂学习笔记]_ajax的两种使用方式

    一.Ajax概述 1.什么是同步,什么是异步 同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待 卡死状态 异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都 ...

  6. 量化投资与Python之pandas

    pandas:数据分析 pandas是一个强大的Python数据分析的工具包.pandas是基于NumPy构建的. pandas的主要功能具备对其功能的数据结构DataFrame.Series集成时间 ...

  7. 在单体应用的一些DDD实践经验

    阅读此文需要一定的DDD基础,如果你是第一次接触DDD读者,建议先去阅读一些DDD相关的书籍或者文章之后再来阅读本文. 背景 自从我在团队中推行DDD以来,我们团队经历了一系列的磨难--先是把核心项目 ...

  8. Hystrix-request collapsing(请求合并)

    介绍: Hystrix的请求合并就是把重复的请求批量的用一个HystrixCommand命令去执行,以减少通信消耗和线程数的占用.Hystrix的请求合并用到了HystrixCollapser这个抽象 ...

  9. linux_网站计量单位

    IP 独立IP数,是不同IP地址的计算机访问网站时被计算的总次数,独立IP数是衡量网站流量的一个重要指标,一般一天内相同IP地址的客户端访问网页只被计算为一次,记录独立IP的时间为一天或一个月,目前通 ...

  10. 易趣:使用MongoDB创建关键业务的多数据中心应用

    eBay:使用MongoDB创建关键业务的多数据中心应用 作为全球前十的零售品牌,eBay的活跃用户有一亿七千多万,并拥有跨越全世界190个市场的10亿购物清单,这样的规模下,eBay绝对不允许出现宕 ...