NSData 所有API

作者: 丨n水瓶座菜虫灬 | 来源:发表于2016-03-29 11:38 被阅读3555次

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

    //获取data长度的属性

    @property (readonly) NSUInteger length;

    //返回data对象的首指针

    @property (readonly) const void *bytes;

    @interface NSData (NSExtendedData)

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

    @property (readonly, copy) NSString *description;

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

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

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

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

    //判断两个data是否相等

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

    //截取data指定位置的子data

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

    //将data写入指定的文件

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

    //将data写入指定的url

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

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

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

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

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

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

    - (NSRange)rangeOfData:(NSData *)dataToFind options:(NSDataSearchOptions)mark range:(NSRange)searchRange;

    //列举遍历字典的方法

    - (void)enumerateByteRangesUsingBlock:(void (^)(const void *bytes, NSRange byteRange, BOOL *stop))block;

    @end

    @interface NSData (NSDataCreation)

    //data的快速创建办法

    + (instancetype)data;

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

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

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

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

    //这个方法生成的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;

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

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

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

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

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

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

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

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

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

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

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

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

    //这个方法生成的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;

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

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

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

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

    //加载flie文件路径

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

    //加载url

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

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

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

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

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

    @end

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

    @interfaceNSData (NSDataBase64Encoding)

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

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

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

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

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

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

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

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

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

    @interfaceNSMutableData :NSData

    //可变data的可变字节

    @property (readonly) void* mutableBytes NS_RETURNS_INNER_POINTER;

    //可变data的长度

    @property NSUInteger length;

    @end

    @interface NSMutableData (NSExtendedMutableData)

    //给可变data追加字节

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

    //给data追加其他的data

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

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

    - (void)increaseLengthBy:(NSUInteger)extraLength;

    示例程序:

    NSMutableData * data = [NSMutableData data];

    [data increaseLengthBy:5];

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

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

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

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

    - (void)resetBytesInRange:(NSRange)range;

    //为可变data设置data数据

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

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

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

    @end

    @interface NSMutableData (NSMutableDataCreation)

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

    + (instancetype)dataWithCapacity:(NSUInteger)aNumItems;

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

    + (instancetype)dataWithLength:(NSUInteger)length;

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

    - (instancetype)initWithCapacity:(NSUInteger)capacity;

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

    - (instancetype)initWithLength:(NSUInteger)length;

    @end

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

    typedef NS_OPTIONS(NSUInteger, NSDataReadingOptions) {

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

    NSDataReadingMappedAlwaysNS_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

    };

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

    typedef NS_OPTIONS(NSUInteger, NSDataWritingOptions) {

    NSDataWritingAtomic =1UL <<0,

    NSDataWritingWithoutOverwritingNS_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,

    NSDataWritingFileProtectionCompleteUntilFirstUserAuthenticationNS_ENUM_AVAILABLE_IOS(5_0)  =0x40000000,

    NSDataWritingFileProtectionMaskNS_ENUM_AVAILABLE_IOS(4_0)                                  =0xf0000000,

    NSAtomicWrite =NSDataWritingAtomic

    };

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

    //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*)bufferNS_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*)pathNS_DEPRECATED(10_0,10_10,2_0,8_0,"Use +dataWithContentsOfURL:options:error: and NSDataReadingMappedIfSafe or NSDataReadingMappedAlways instead.");

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

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

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

    @end

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

    NS_CLASS_AVAILABLE(10_6,4_0)

    @interfaceNSPurgeableData :NSMutableData {

    @private

    NSUInteger_length;

    int32_t_accessCount;

    uint8_t_private[32];

    void*_reserved;

    }

    @end


    相关文章

      网友评论

        本文标题:NSData 所有API

        本文链接:https://www.haomeiwen.com/subject/qahslttx.html