NSData 所有API

@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中指定長度的字節(jié)存入buffer這個提前聲明的數組中

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

//取出data中指定位置range的字節(jié)存入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的快速創(chuàng)建辦法

+ (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來創(chuàng)建一個新的NSData對象膳汪,參數可以是NSMutableData對象唯蝶。

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

//用指定的NSData對象aData來創(chuàng)建一個新的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的可變字節(jié)

@property (readonly) void* mutableBytes NS_RETURNS_INNER_POINTER;

//可變data的長度

@property NSUInteger length;

@end

@interface NSMutableData (NSExtendedMutableData)

//給可變data追加字節(jié)

- (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替換對應位置的字節(jié)

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

//重置可變data對應位置的字節(jié)

- (void)resetBytesInRange:(NSRange)range;

//為可變data設置data數據

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

//給data替換對應位置的字節(jié), 并且存在替換長度

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

@end

@interface NSMutableData (NSMutableDataCreation)

//動態(tài)創(chuàng)建可變data并且初始化指定大小

+ (instancetype)dataWithCapacity:(NSUInteger)aNumItems;

//動態(tài)創(chuàng)建可變data并且初始化指定長度

+ (instancetype)dataWithLength:(NSUInteger)length;

//靜態(tài)創(chuàng)建可變data并且初始化指定大小

- (instancetype)initWithCapacity:(NSUInteger)capacity;

//靜態(tài)創(chuàng)建可變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


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末袖肥,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子椒振,更是在濱河造成了極大的恐慌昭伸,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澎迎,死亡現場離奇詭異庐杨,居然都是意外死亡,警方通過查閱死者的電腦和手機夹供,發(fā)現死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門灵份,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人哮洽,你說我怎么就攤上這事填渠。” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵氛什,是天一觀的道長莺葫。 經常有香客問我,道長枪眉,這世上最難降的妖魔是什么捺檬? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮贸铜,結果婚禮上堡纬,老公的妹妹穿的比我還像新娘。我一直安慰自己蒿秦,他們只是感情好烤镐,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棍鳖,像睡著了一般炮叶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鹊杖,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天悴灵,我揣著相機與錄音扛芽,去河邊找鬼骂蓖。 笑死,一個胖子當著我的面吹牛川尖,可吹牛的內容都是我干的登下。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼叮喳,長吁一口氣:“原來是場噩夢啊……” “哼挽唉!你這毒婦竟也來了缸濒?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扬绪,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體几迄,經...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡牺勾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了毅整。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趣兄。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖悼嫉,靈堂內的尸體忽然破棺而出艇潭,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布蹋凝,位于F島的核電站鲁纠,受9級特大地震影響,放射性物質發(fā)生泄漏鳍寂。R本人自食惡果不足惜房交,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伐割。 院中可真熱鬧候味,春花似錦、人聲如沸隔心。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硬霍。三九已至帜慢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唯卖,已是汗流浹背粱玲。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拜轨,地道東北人抽减。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像橄碾,于是被迫代替她去往敵國和親卵沉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內容