Objective-C NSData/NSMutableData
Posted 懒虫哥哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Objective-C NSData/NSMutableData相关的知识,希望对你有一定的参考价值。
创建于完成: 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的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3.0 令人兴奋,但Objective-C也有小改进--Objective-C的类属性
如何在c++中,调用objective-c
1了解Objective-C语言的起源
Objective-C 和 C++ 的区别有哪些?
Objective-C中的Hello World
C++和Objective-C混编(官方文档翻译)