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中指定長度的位元組存入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
相關文章
- JavaScript字串所有API全解密JavaScript字串API解密
- 用法總結:NSNumber、NSString、NSData
- 淘寶API分享:獲得店鋪的所有商品 APIAPI
- NSData與UIImage之間的轉換UI
- 所有陣列的方法(api)總結陣列API
- NSData之間資料型別轉化資料型別
- 淘寶API,獲取店鋪的所有商品API
- 京東獲得店鋪的所有商品 APIAPI
- 【深度長文】JavaScript陣列所有API全解密JavaScript陣列API解密
- 原始碼閱讀:SDWebImage(三)——NSData+ImageContentType原始碼Web
- NSString, NSData和Byte的相互轉換
- 如何使用1688店鋪所有商品API介面API
- iOS播放PCM,NSData流程式碼(Audio Queue Services)iOS
- 解決NSData中包含非法UTF-8編碼
- API 所有的響應狀態碼都是 200?API
- ProgrammableWeb預言:所有公司都將擁有自己的APIWebAPI
- 透過1688店鋪所有商品API介面一鍵獲取店鋪所有商品資訊API
- ChatGPT正式釋出API,所有企業都可以接入ChatGPTAPI
- 1688API介面分享:獲得店鋪的所有商品 API 返回值說明API
- 京東獲得店鋪的所有商品API介面(item_search_shop-獲得店鋪的所有商API
- 呼叫域名註冊api,查詢所有域名組合指令碼API指令碼
- Eolink Apikit 如何對所有 API 異常請求實時監控 ?API
- 轉 IOS---NSdata 與 NSString,Byte陣列,UIImage 的相互轉換iOS陣列UI
- Firefox擬用API讓所有網站獲得網頁通話聊天功能FirefoxAPI網站網頁
- object c基礎, 基本型別(NSString,char*NSDate,NSData),集合NSArray,NSMutableArray,NSDictionary,NSMutableDiction...Object型別
- 呼叫 API 介面獲取淘寶店鋪所有商品:詳細指南與程式碼實踐API
- 呼叫API介面獲取淘寶店鋪所有商品:詳細指南與程式碼實踐API
- Oracle中用sql查詢獲取資料庫的所有觸發器,所有儲存過程,所有檢視,所有表...OracleSQL資料庫觸發器儲存過程
- db2 所有版本的所有補丁下載地址DB2
- 在Autodesk Vault 2014中使用VDF(Vault Development Framework) API獲取所有檔案的屬性資訊devFrameworkAPI
- 免費常用API介面:簡訊API,天氣API,快遞API,識別API...API
- Kill 所有MySQL程式MySql
- Rust所有權__OwnershipRust
- GraphQL API vs REST APIAPIREST
- 釋出一個npm包,用於監控頁面中的所有API請求的狀態和結果NPMAPI
- 探索1688店鋪所有商品API介面:一鍵獲取海量資料,開啟商業智慧新篇章API
- 用blender python api 寫一段獲取所有幀中骨架中所有骨骼的位置,旋轉,縮放的屬性的值,列印並寫入到csv檔案中PythonAPI
- 熱門免費api介面:含物流api,簡訊api,天氣api等API