NSData全部API解释

NSData

NSData全部API解释

//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);

//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 *bytesNS_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 (^)(constvoid *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;
  • (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)optionsNS_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)optionsNS_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, 

NSDataWritingFileProtectionNoneNS_ENUM_AVAILABLE_IOS(4_0)                                  = 0x10000000,

NSDataWritingFileProtectionCompleteNS_ENUM_AVAILABLE_IOS(4_0)                              =0x20000000,

NSDataWritingFileProtectionCompleteUnlessOpenNS_ENUM_AVAILABLE_IOS(5_0)                    = 0x30000000,

NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication NS_ENUM_AVAILABLE_IOS(5_0)  = 0x40000000,

NSDataWritingFileProtectionMaskNS_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);

@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容