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. IOS开发之UIView总结1

    太长了,请看 http://blog.csdn.net/xdrt81y/article/details/9128695 performSelector: performSelector:withObj ...

  2. Java数据持久层框架 MyBatis之API学习一(简介)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  3. Django_MTV视图

    WEB服务请求流程? 用户请求通过url,url带着用户的用户信息封装成request,然后服务器收到url请求,激活获取url中带来的request,服务器处理request逻辑后,返回封装好的re ...

  4. Django中url使用命名空间的错误

    出的错误: 1. Reverse for 'llist' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) ...

  5. 企业级分布式存储应用与实战-mogilefs实现

    Mogilefs是什么 MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发.Danga团队开发了包括 Memcached.Mogi ...

  6. [Java 教程 01] Hello,Java!

    前言 从事编程已经有一段时间了,突然发现,Java作为我的第一编程语言,自己似乎对她并有一个系统的思想.当下Java依旧保持着超高的热度,新特性也不断出现,从当初学习的java6版本到最近刚出的jav ...

  7. 虚拟机centos7无法上网解决方法

    1.打开终端输入cd /etc/sysconfig/network-scripts/,输入ls查看网卡配置文件名,每台机器的网卡名并不相同. 第一个ifcfg-ens33是我的网卡名 2. 先取得ro ...

  8. [JLOI2011]基因补全

    1973: [JLOI2011]基因补全 Time Limit: 1 Sec  Memory Limit: 256 MB Description 在生物课中我们学过,碱基组成了DNA(脱氧核糖核酸), ...

  9. 00_HTML入门第一天

    HTML入门 body标记的常见属性:bgcolor 设置背景颜色:text 设置文本颜色:link 设置链接颜色:vlink 设置已经访问了的链接颜色:alink 正在点击的链接颜色: meta是单 ...

  10. windows 7 wifi热点配置

    自我总结,有什么不足或更好的解决方案,请告知,感激不尽! 目的:闲来无事的童鞋,可以试一试自己配置wifi热点. ps:其实wifi热点配置是系统存在的功能,只不过需要配置. 现在win桌面wifi热 ...