{"id":988,"date":"2021-03-15T15:49:42","date_gmt":"2021-03-15T07:49:42","guid":{"rendered":"http:\/\/www.mustenaka.cn\/?p=988"},"modified":"2021-03-15T17:17:05","modified_gmt":"2021-03-15T09:17:05","slug":"oc-nsdata-introducensnsdata","status":"publish","type":"post","link":"https:\/\/www.mustenaka.cn\/index.php\/2021\/03\/15\/oc-nsdata-introducensnsdata\/","title":{"rendered":"OC &#8211; NSData \u7c7b\u8be6\u89e3"},"content":{"rendered":"<p>NSData\u662fCocoa\u4e0b\u5bf9\u4e8c\u8fdb\u5236\u6570\u636e\u7684\u4e00\u4e2a\u5c01\u88c5(wrapper)\uff0c\u80fd\u591f\u628a\u4e8c\u8fdb\u5236\u7684\u6570\u636e\u5f53\u505a\u5bf9\u8c61\u6765\u5904\u7406\uff0c\u540c\u7b80\u5355\u7684byte()\u4e0d\u4e00\u6837\u7684\u662f\uff0cNSData\u7684\u6709\u70b9\u662f\u53ef\u4ee5\u8fdb\u884c\u66f4\u52a0\u62bd\u8c61\u753b\u7684\u64cd\u4f5c\uff0c\u4f7f\u5f97\u5185\u5b58\u7ba1\u7406\u66f4\u52a0\u5bb9\u6613\uff0c\u540c\u65f6\u4e5f\u662fCocoaAPI\u4e2d\u64cd\u4f5c\u4e8c\u8fdb\u5236\u6570\u636e\u7684\u6807\u51c6\u3002<\/p>\n<hr \/>\n<p>\u4e2a\u4eba\u611f\u89c9\u56e0\u4e3adata\u7684\u53d8\u5316\u6027\u8d28\uff0c\u6bd4\u5982\u8bf4\u4eceapi\u63a5\u53e3\uff0c\u6216\u8005\u6587\u6863\u4e2d\u8bfb\u53d6\uff0c\u91c7\u7528 NSData\uff0cdata\u6570\u636e\u603b\u5f52\u662f\u8981\u5904\u7406\u7684\uff08\u4e0d\u7136\u5f15\u7528\u4ed6\u5e72\u5565\uff09\uff0c\u6240\u4ee5\u5c31\u7acb\u523b\u7528NSMutableData\u8fdb\u884c\u518d\u5ea6\u5f15\u7528\u548c\u5904\u7406\uff0c\u8fd9\u6837\u7684\u597d\u5904\u662f\u6700\u5f00\u59cb\u7684\u6570\u636e\u662f\u4fdd\u7559\u7740\u7684\u3002<\/p>\n<h4>1.\u521b\u5efa<\/h4>\n<pre class=\"pure-highlightjs\"><code class=\"\" objectivec=\"\">    \/\/\u5bf9\u8c61\u65b9\u6cd5\u521b\u5efa\r\n    NSData *data1 = [[NSData alloc] init];\r\n    NSData *data2 = [[NSData alloc] initWithData:data1];\r\n\r\n    \/\/\u7c7b\u65b9\u6cd5\u521b\u5efa\r\n    NSData *data3 = [NSData data];\r\n    NSData *data4 = [NSData dataWithData:data3];\r\n\r\n    \/\/\u7531\u6587\u4ef6\u521b\u5efa\r\n    NSString *filePath = [NSHomeDirectory() stringByAppendingString:@\"\/Desktop\/test.txt\"];  \r\n    NSData *data5 = [[NSData alloc] initWithContentsOfFile:filePath];\r\n    NSData *data6 = [NSData dataWithContentsOfFile:filePath];\r\n\r\n    \/\/ \u7531 URL \u521b\u5efa\r\n    NSURL *urlPath = [NSURL URLWithString:[@\"file:\/\/\" stringByAppendingString:[NSHomeDirectory() stringByAppendingString:@\"\/Desktop\/test.txt\"]]];\r\n    NSData *data7 = [[NSData alloc] initWithContentsOfURL:urlPath];\r\n    NSData *data8 = [NSData dataWithContentsOfURL:urlPath];\r\n\r\n    \/\/ \u7531 \u5b57\u7b26\u4e32 \u521b\u5efa\r\n    NSString *string = @\"bei jing nin hao\";\r\n    NSData *data9 = [string dataUsingEncoding:NSUTF8StringEncoding];\r\n    NSData *data10 = [string dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];\r\n\r\n    \/\/ \u53ef\u53d8 NSData \u7684\u521b\u5efa\r\n    \/\/ \u521d\u59cb\u5316\u65f6\u6307\u5b9a\u5bf9\u8c61\u62e5\u6709\u7684\u5b57\u8282\u7a7a\u95f4\u5927\u5c0f\uff0c\u5728\u9700\u8981\u65f6\u4f1a\u589e\u52a0\u5185\u5b58\u7a7a\u95f4\uff0c\u5728\u521d\u59cb\u5316\u65f6\u5e76\u6ca1\u6709\u5206\u914d\u5185\u5b58\u7a7a\u95f4\r\n    NSMutableData *data11 = [[NSMutableData alloc] initWithCapacity:5];\r\n    NSMutableData *data12 = [NSMutableData dataWithCapacity:5];\r\n\r\n    \/\/ \u521d\u59cb\u5316\u65f6\u4e3a\u5bf9\u8c61\u5206\u914d\u6307\u5b9a\u957f\u5ea6\u7684\u5f52\u96f6\u5b57\u8282\r\n    NSMutableData *data13 = [[NSMutableData alloc] initWithLength:10];\r\n    NSMutableData *data14 = [NSMutableData dataWithLength:10];<\/code><\/pre>\n<h4>2.NSData\u4e0eNSString\uff0cByte\uff0cUIImage\u4e4b\u95f4\u7684\u8f6c\u6362<\/h4>\n<pre class=\"pure-highlightjs\"><code class=\"\" objectivec=\"\">    \/\/NSString \u8f6c\u6362\u6210 NSData\r\n    NSString *str = @\"Hello\";\r\n    NSData *strData = [str dataUsingEncoding:NSUTF8StringEncoding];\r\n\r\n    \/\/NSData \u8f6c\u6362\u6210 NSString\r\n    NSString *str1 = [[NSString alloc]initWithData:strData encoding:NSUTF8StringEncoding];\r\n\r\n    \/\/Byte \u8f6c\u6362\u6210 NSData\r\n    Byte byte[] = {1,2,3,4,5,6,7,8,9,10};  \r\n    NSData *byteData = [[NSData alloc] initWithBytes:byte length:10];\r\n\r\n    \/\/NSData \u8f6c\u6362\u6210 Byte \r\n    Byte *testByte = (Byte *)[byteData bytes]; \r\n\r\n    \/\/UIImage \u8f6c\u6362\u6210 NSData\r\n    NSData *imageData1 = UIImagePNGRepresentation(UIImage *image);     \/\/png \u683c\u5f0f \r\n    NSData *imageData2 = UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality)  \/\/jpeg\u683c\u5f0f  \r\n\r\n    \/\/NSData \u8f6c\u6362\u6210 UIImage\r\n    UIImage *aimage = [UIImage imageWithData: imageData]; <\/code><\/pre>\n<h4>3.\u5220\u9664\u548creplace\u6570\u636e<\/h4>\n<pre class=\"pure-highlightjs\"><code class=\"\" objectivec=\"\">#import &lt;Foundation\/NSObject.h&gt;\r\n#import &lt;Foundation\/Foundation.h&gt;\r\n\r\n\r\nint main(int argc, const char * argv[]) {\r\n    Byte byte[] = {1, 2, 3, 4, 5, 6};\r\n    NSMutableData *dataM = [[NSMutableData alloc] initWithBytes: byte length:6];\r\n    \r\n    NSLog(@\"\u539f\u59cb\u6570\u636e length:%d, dataM: %@\",(int)dataM.length, dataM);\r\n    [dataM resetBytesInRange:NSMakeRange(0, 3)];\r\n    \r\n    NSLog(@\"reset\u64cd\u4f5c length:%d, dataM: %@\",(int)dataM.length, dataM);\r\n    [dataM replaceBytesInRange:NSMakeRange(0, 2) withBytes:NULL length:0];\r\n    \r\n    NSLog(@\"replace\u64cd\u4f5c length:%d, dataM:%@\",(int)dataM.length, dataM);\r\n    \r\n    return 0;\r\n}<\/code><\/pre>\n<p>\u53ef\u53d8\u6570\u636e\u7c7bNSMutableData\uff0c\u5b9e\u4f8b\u5bf9\u8c61\u5728\u521d\u59cb\u4e4b\u540e\u53ef\u88ab\u4fee\u6539\uff0c\u6bd4\u5982\u589e\u52a0\u6216\u8005\u5220\u9664\u6570\u636e\uff0c\u4f1a\u968f\u7740\u6570\u636e\u7684\u53d8\u66f4\u81ea\u52a8\u7ba1\u7406\u5185\u5b58\uff0c\u4f7f\u7528\u8005\u4e0d\u5fc5\u5173\u5fc3NSMutableData\u5bf9\u8c61\u7684\u5185\u5b58\u7ba1\u7406\u3002<\/p>\n<p>\u5728\u8bbf\u95ee\u64cd\u4f5c\u7684\u57fa\u7840\u4e4b\u4e0a\u589e\u52a0\u4e86\u8ffd\u52a0\u6570\u636e\uff0c\u66f4\u65b0\u6570\u636e\uff0c\u548c\u589e\u957f\u7f13\u51b2\u533a\u7684\u957f\u5ea6\u7b49\u529f\u80fd\u3002<\/p>\n<h5>\u5168\u90e8API<\/h5>\n<pre class=\"pure-highlightjs\"><code class=\"\" objectivec=\"\">\/\/NSData\r\n\r\n\/\/base64\u7f16\u7801\u4e2d\u7684\u4e00\u4e9b\u8bbe\u7f6e\u9009\u62e9\r\ntypedef NS_OPTIONS(NSUInteger, NSDataBase64EncodingOptions) {\r\n\r\n    NSDataBase64Encoding64CharacterLineLength = 1UL &lt;&lt; 0,\r\n    NSDataBase64Encoding76CharacterLineLength = 1UL &lt;&lt; 1,\r\n    NSDataBase64EncodingEndLineWithCarriageReturn = 1UL &lt;&lt; 4,\r\n    NSDataBase64EncodingEndLineWithLineFeed = 1UL &lt;&lt; 5,\r\n\r\n} NS_ENUM_AVAILABLE(10_9, 7_0);\r\n\r\n\/\/base64\u5728\u89e3\u7801\u8fc7\u7a0b\u4e2d\u7684option\u53ef\u9009\u6761\u4ef6,\u4e0b\u9762\u9009\u9879\u8868\u793a\u5728\u5c06\u8bf6\u5417\u8fc7\u7a0b\u4e2d\u5ffd\u7565\u4e0d\u80fd\u8bc6\u522b\u7684\u5b57\u8282\r\ntypedef NS_OPTIONS(NSUInteger, NSDataBase64DecodingOptions) {\r\n    NSDataBase64DecodingIgnoreUnknownCharacters = 1UL &lt;&lt; 0 \r\n} NS_ENUM_AVAILABLE(10_9, 7_0);\r\n\r\n\/**************** Immutable Data\u4e0d\u53ef\u53d8\u7684Data****************\/\r\n\r\n@interface NSData : NSObject &lt;NSCopying, NSMutableCopying, NSSecureCoding&gt;\r\n\/\/6.\u83b7\u53d6data\u957f\u5ea6\u7684\u5c5e\u6027\r\n@property (readonly) NSUInteger length;\r\n\/\/7.\u8fd4\u56dedata\u5bf9\u8c61\u7684\u9996\u6307\u9488\r\n@property (readonly) const void *bytesNS_RETURNS_INNER_POINTER;\r\n@end\r\n\r\n\r\n\r\n@interface NSData (NSExtendedData)\r\n\r\n\/\/8.\u8fd4\u56de\u4e00\u4e2aASCII\u7f16\u7801\u683c\u5f0f\u7684\u5b57\u7b26\u4e32\uff0c\u91c7\u7528\u7684\u683c\u5f0f\u662fdata\u5c5e\u6027\u5217\u8868\u7684\u683c\u5f0f\u3002\r\n@property (readonly, copy) NSString *description;\r\n\r\n\/\/9.\u53d6\u51fadata\u4e2d\u6307\u5b9a\u957f\u5ea6\u7684\u5b57\u8282\u5b58\u5165buffer\u8fd9\u4e2a\u63d0\u524d\u58f0\u660e\u7684\u6570\u7ec4\u4e2d\r\n- (void)getBytes:(void *)buffer length:(NSUInteger)length;\r\n\r\n\/\/9.\u53d6\u51fadata\u4e2d\u6307\u5b9a\u4f4d\u7f6erange\u7684\u5b57\u8282\u5b58\u5165buffer\u8fd9\u4e2a\u63d0\u524d\u58f0\u660e\u7684\u6570\u7ec4\u4e2d\r\n- (void)getBytes:(void *)buffer range:(NSRange)range;\r\n\r\n\/\/10.\u5224\u65ad\u4e24\u4e2adata\u662f\u5426\u76f8\u7b49\r\n- (BOOL)isEqualToData:(NSData *)other;\r\n\r\n\/\/11.\u622a\u56fedata\u6307\u5b9a\u4f4d\u7f6e\u7684\u5b50data\r\n- (NSData *)subdataWithRange:(NSRange)range;\r\n\r\n\/\/12.\u5c06data\u5199\u5165\u6307\u5b9a\u7684\u6587\u4ef6\r\n- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;\r\n\r\n\/\/13.\u5c06data\u5199\u5165\u6307\u5b9a\u7684url\r\n- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically; \r\n\r\n\/\/14.\u5c06data\u5199\u5165\u6307\u5b9a\u6587\u4ef6\uff0c\u5e76\u4e14\u6709\u5199\u5165\u8fc7\u7a0b\u7684\u8bbe\u7f6e\u6761\u4ef6\uff0c\u5e26\u9519\u8bef\u4fe1\u606f\r\n- (BOOL)writeToFile:(NSString *)path options:(NSDataWritingOptions)writeOptionsMask error:(NSError **)errorPtr;\r\n\r\n\/\/15.\u5c06data\u5199\u5165\u6307\u5b9a\u7684url\uff0c\u5e76\u4e14\u6709\u5199\u5165\u8fc7\u7a0b\u7684\u8bbe\u7f6e\u6761\u4ef6\uff0c\u5e26\u9519\u8bef\u4fe1\u606f\r\n- (BOOL)writeToURL:(NSURL *)url options:(NSDataWritingOptions)writeOptionsMask error:(NSError **)errorPtr;\r\n\r\n\/\/16.\u641c\u7d22\u5728data1\u5185\u90e8\u5b58\u5728data2\u7684\u4f4d\u7f6e\uff0c\u5e76\u4e14\u6709\u641c\u7d22\u914d\u7f6e\u6761\u4ef6\uff0c\u5e76\u4e14\u53ef\u52a0\u5165\u641c\u7d22\u7684\u8303\u56f4\r\n- (NSRange)rangeOfData:(NSData *)dataToFind options:(NSDataSearchOptions)mask range:(NSRange)searchRange NS_AVAILABLE(10_6, 4_0);\r\n\r\n\/\/17.\u5217\u4e3e\u904d\u5386\u5b57\u5178\u7684\u65b9\u6cd5\r\n- (void) enumerateByteRangesUsingBlock:(void (^)(constvoid *bytes, NSRange byteRange, BOOL *stop))block NS_AVAILABLE(10_9, 7_0);\r\n\r\n@end\r\n\r\n\r\n\r\n\/*** \u521b\u5efadata\u7684\u6240\u6709\u76f8\u5173\u65b9\u6cd5\u4f5c\u4e3a\u4e00\u4e2a\u7c7b\u522b\u51e0\u79cd\u5230\u4e00\u5757 ***\/\r\n@interface NSData (NSDataCreation)\r\n\r\n\/\/18.data\u7684\u5feb\u901f\u521b\u5efa\u529e\u6cd5\r\n+ (instancetype)data;\r\n\r\n\/\/19.\u8d4b\u503c\u4ee5bytes\u5f00\u5934\uff0c\u957f\u5ea6\u4e3alength\u7684\u6570\u636e\uff0c\u8fdb\u884c\u521d\u59cb\u5316\u4f7f\u5176\u6210\u4e3a\u6570\u636e\u5bf9\u8c61\u7684\u5185\u5bb9\r\n+ (instancetype)dataWithBytes:(const void *)bytes length:(NSUInteger)length;\r\n\r\n\/\/20.\u8fd9\u4e2a\u65b9\u6cd5\u751f\u6210\u7684data\u4e2d\u4fdd\u5b58\u7684\u662f\u6307\u5411\u6570\u636e\u7684\u6307\u9488\uff0c\u5e76\u6ca1\u6709\u5bf9\u6570\u636e\u8fdb\u884c\u590d\u5236\u64cd\u4f5c\u3002\r\n+ (instancetype)dataWithBytesNoCopy:(void *)bytes length:(NSUInteger)length;\r\n\r\n\/\/21.\u8fd9\u4e2a\u65b9\u6cd5\u751f\u6210\u7684data\u4e2d\u4fdd\u5b58\u7684\u662f\u6307\u5411\u6570\u636e\u7684\u6307\u9488\uff0c\u5e76\u6ca1\u6709\u5bf9\u6570\u636e\u8fdb\u884c\u590d\u5236\u64cd\u4f5c\u3002\u5f53flag\u4e3ayes\u7684\u65f6\u5019\uff0c\u751f\u6210\u7684data\u5bf9\u8c61\u662fbytes\u7684\u6240\u6709\u8005\uff0c\u5f53data\u5bf9\u8c61\u88ab\u91ca\u653e\u7684\u65f6\u5019\u4e5f\u4f1a\u540c\u65f6\u91ca\u653ebytes\uff0c\u6240\u4ee5bytes\u5fc5\u987b\u662f\u901a\u8fc7malloc\u5728\u5806\u4e0a\u5206\u914d\u7684\u5185\u5b58\u3002\u5f53flag\u4e3ano\u7684\u65f6\u5019\uff0cbytes\u4e0d\u4f1a\u88ab\u81ea\u52a8\u91ca\u653e\uff0c\u91ca\u653ebytes\u65f6\u8981\u6ce8\u610f\u65f6\u673a\uff0c\u4e0d\u8981\u518ddata\u5bf9\u8c61\u8fd8\u88ab\u4f7f\u7528\u7684\u65f6\u5019\u91ca\u653ebytes\u3002\r\n+ (instancetype)dataWithBytesNoCopy:(void *)bytes length:(NSUInteger)length freeWhenDone:(BOOL)b;\r\n\r\n\/\/22.\u52a0\u8f7dfile\u6587\u4ef6\uff0c\u5e76\u4e14\u6709\u53ef\u9009\u62e9\u8bfb\u53d6\u6587\u4ef6\u7684\u9009\u9879\u914d\u7f6e\u6761\u4ef6\uff0c\u5e26\u6709\u9519\u8bef\u4fe1\u606f\r\n+ (instancetype)dataWithContentsOfFile:(NSString *)path options:\r\n(NSDataReadingOptions)readOptionsMask error:(NSError**)errorPtr;\r\n\r\n\/\/23.\u52a0\u8f7durl\uff0c\u5e76\u4e14\u6709\u53ef\u9009\u62e9\u8bfb\u53d6\u6587\u4ef6\u7684\u9009\u9879\u914d\u7f6e\u6761\u4ef6\uff0c\u5e26\u6709\u9519\u8bef\u4fe1\u606f\r\n+ (instancetype)dataWithContentsOfURL:(NSURL *)url options:(NSDataReadingOptions)readOptionsMask error:(NSError **)errorPtr;\r\n\r\n\/\/24.\u4ece\u53c2\u6570path\u6307\u5b9a\u7684\u6587\u4ef6\u8bfb\u5165\u4e8c\u8fdb\u5236\u6570\u636e\uff0c\u7528\u8be5\u6570\u636e\u521d\u59cb\u5316NSData\u5bf9\u8c61\u3002\r\n+ (instancetype)dataWithContentsOfFile:(NSString *)path;\r\n\r\n\/\/25.\u4ece\u53c2\u6570path\u6307\u5b9a\u7684url\u8bfb\u5165\uff0c\u7528\u8be5\u6570\u636e\u521d\u59cb\u5316NSData\u5bf9\u8c61\u3002\r\n+ (instancetype)dataWithContentsOfURL:(NSURL *)url;\r\n\r\n\/\/26.\u8d4b\u503c\u4ee5bytes\u5f00\u5934\uff0c\u957f\u5ea6\u4e3alength\u7684\u6570\u636e\uff0c\u8fdb\u884c\u521d\u59cb\u5316\u4f7f\u5176\u6210\u4e3a\u6570\u636e\u5bf9\u8c61\u7684\u5185\u5bb9\r\n- (instancetype)initWithBytes:(const void *)bytes length:(NSUInteger)length;\r\n\r\n\/\/27.\u8fd9\u4e2a\u65b9\u6cd5\u751f\u6210\u7684data\u4e2d\u4fdd\u5b58\u7684\u662f\u6307\u5411\u6570\u636e\u7684\u6307\u9488\uff0c\u5e76\u6ca1\u6709\u5bf9\u6570\u636e\u8fdb\u884c\u590d\u5236\u64cd\u4f5c\u3002\r\n- (instancetype)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length;\r\n\r\n\/\/28.\u8fd9\u4e2a\u65b9\u6cd5\u751f\u6210\u7684data\u4e2d\u4fdd\u5b58\u7684\u662f\u6307\u5411\u6570\u636e\u7684\u6307\u9488\uff0c\u5e76\u6ca1\u6709\u5bf9\u6570\u636e\u8fdb\u884c\u590d\u5236\u64cd\u4f5c\u3002\u5f53flag\u4e3ayes\u7684\u65f6\u5019\uff0c\u751f\u6210\u7684data\u5bf9\u8c61\u662fbytes\u7684\u6240\u6709\u8005\uff0c\u5f53data\u5bf9\u8c61\u88ab\u91ca\u653e\u7684\u65f6\u5019\u4e5f\u4f1a\u540c\u65f6\u91ca\u653ebytes\uff0c\u6240\u4ee5bytes\u5fc5\u987b\u662f\u901a\u8fc7malloc\u5728\u5806\u4e0a\u5206\u914d\u7684\u5185\u5b58\u3002\u5f53flag\u4e3ano\u7684\u65f6\u5019\uff0cbytes\u4e0d\u4f1a\u88ab\u81ea\u52a8\u91ca\u653e\uff0c\u91ca\u653ebytes\u65f6\u8981\u6ce8\u610f\u65f6\u673a\uff0c\u4e0d\u8981\u518ddata\u5bf9\u8c61\u8fd8\u88ab\u4f7f\u7528\u7684\u65f6\u5019\u91ca\u653ebytes\u3002\r\n- (instancetype)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length freeWhenDone:(BOOL)b;\r\n\r\n\r\n- (instancetype)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length deallocator:(void (^)(void *bytes,NSUInteger length))deallocator NS_AVAILABLE(10_9, 7_0);\r\n\r\n\/\/30.\u4ece\u53c2\u6570path\u6307\u5b9a\u7684\u6587\u4ef6\u8bfb\u5165\u4e8c\u8fdb\u5236\u6570\u636e\uff0c\u7528\u8be5\u6570\u636e\u521d\u59cb\u5316NSData\u5bf9\u8c61\u3002\u5982\u679c\u8bfb\u53d6\u6587\u4ef6\u5931\u8d25\uff0c\u5219\u91ca\u653e\u8c03\u7528\u8005\u5e76\u8fd4\u56denil\uff0c\u540c\u65f6\u628a\u9519\u8bef\u4fe1\u606f\u5199\u5165\u6307\u9488errorPtr\u3002mask\u662f\u4e00\u4e2a\u9009\u9879\u4fe1\u606f\uff0c\u7528\u4e8e\u6307\u5b9a\u662f\u5426\u4f7f\u7528\u865a\u62df\u5185\u5b58\u7b49\u3002\r\n- (instancetype)initWithContentsOfFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask error:(NSError**)errorPtr;\r\n\r\n\/\/31.\u4ece\u53c2\u6570url\u6307\u5b9a\u7684\u8def\u5f84\u4e2d\u8bfb\u5165\uff0c\u7528\u8be5\u6570\u636e\u521d\u59cb\u5316NSData\u5bf9\u8c61\u3002\u5982\u679c\u8bfb\u53d6\u6587\u4ef6\u5931\u8d25\uff0c\u5219\u91ca\u653e\u8c03\u7528\u8005\u5e76\u8fd4\u56denil\uff0c\u540c\u65f6\u628a\u9519\u8bef\u4fe1\u606f\u5199\u5165\u6307\u9488errorPtr\u3002mask\u662f\u4e00\u4e2a\u9009\u9879\u4fe1\u606f\uff0c\u7528\u4e8e\u6307\u5b9a\u662f\u5426\u4f7f\u7528\u865a\u62df\u5185\u5b58\u7b49\u3002\r\n- (instancetype)initWithContentsOfURL:(NSURL *)url options:(NSDataReadingOptions)readOptionsMask error:(NSError **)errorPtr;\r\n\r\n\/\/32.\u52a0\u8f7dflie\u6587\u4ef6\u8def\u5f84\r\n- (instancetype)initWithContentsOfFile:(NSString *)path;\r\n\r\n\/\/33.\u52a0\u8f7durl\r\n- (instancetype)initWithContentsOfURL:(NSURL *)url;\r\n\r\n\/\/34.\u7528\u6307\u5b9a\u7684NSData\u5bf9\u8c61aData\u6765\u521b\u5efa\u4e00\u4e2a\u65b0\u7684NSData\u5bf9\u8c61\uff0c\u53c2\u6570\u53ef\u4ee5\u662fNSMutableData\u5bf9\u8c61\u3002\r\n- (instancetype)initWithData:(NSData *)data;\r\n\r\n\/\/35.\u7528\u6307\u5b9a\u7684NSData\u5bf9\u8c61aData\u6765\u521b\u5efa\u4e00\u4e2a\u65b0\u7684NSData\u5bf9\u8c61\uff0c\u53c2\u6570\u53ef\u4ee5\u662fNSMutableData\u5bf9\u8c61\u3002\r\n+ (instancetype)dataWithData:(NSData *)data;\r\n\r\n\r\n@end\r\n\r\n\/*** base64\u65b9\u6848\u7f16\u7801\u5206\u7c7b  iOS7\u4e4b\u540e\u82f9\u679c\u7ed9\u51fa\u4ee5\u4e0b\u56db\u4e2aAPI\u4f9b\u5b9e\u73b0base64\u65b9\u6848 \u5934\u4e24\u4e2a\u662f\u5904\u7406\u5b57\u7b26\u4e32\u7684\uff0c\u540e\u4e24\u4e2a\u662f\u5904\u7406UTF-8\u7f16\u7801\u6570\u636e\u7684\uff0c\u8fd9\u4e24\u4e2a\u627f\u5151\u7684\u65b9\u6cd5\u529f\u80fd\u662f\u4e00\u6837\u7684\uff0c\u4f46\u662f\u6709\u65f6\u5019\u7528\u5176\u4e2d\u4e00\u4e2a\u6bd4\u53e6\u4e00\u4e2a\u6548\u7387\u8981\u9ad8\u3002\u5982\u679c\u4f60\u50cf\u8981bae64\u7f16\u7801\u5b57\u7b26\u4e32\u7136\u540e\u5199\u8fdb\u6587\u4ef6\uff0c\u4f60\u5e94\u8be5\u4f7f\u7528UTF-8\u7f16\u7801\u6570\u636e\u7684\u8fd9\u5bf9\u65b9\u6cd5\u3002\u5982\u679c\u4f60\u6253\u7b97base64\u7f16\u7801\u5b57\u7b26\u4e32\u4e4b\u540e\u7528\u4f5cjson\uff0c\u4f60\u5e94\u8be5\u4f7f\u7528\u53e6\u5916\u4e00\u5bf9\u65b9\u6cd5 \u7f16\u7801\u89e3\u7801\u4e00\u4e00\u5bf9\u5e94***\/\r\n@interface NSData (NSDataBase64Encoding)\r\n\r\n\/\/36.\u89e3\u7801\u3002\u5c06\u5df2\u7ecfbase64\u7f16\u7801\u4e4b\u540e\u7684\u5b57\u7b26\u4e32\u6570\u636e\u518d\u8f6c\u5316\u4e3aNSData\u6570\u636e\uff0c\r\n- (instancetype)initWithBase64EncodedString:(NSString *)base64String options:(NSDataBase64DecodingOptions)optionsNS_AVAILABLE(10_9, 7_0);\r\n\r\n\/\/37.\u7f16\u7801\u3002\u5c06\u4e00\u4e2adata\u6570\u636e\u5229\u7528base64\u65b9\u6848\u8f6c\u5316\u6210base64\u4e4b\u540e\u7684NSString\u5b57\u7b26\u4e32\r\n- (NSString *)base64EncodedStringWithOptions:(NSDataBase64EncodingOptions)options NS_AVAILABLE(10_9, 7_0);\r\n\r\n\/\/38.\u89e3\u7801\u3002\u5c06\u5df2\u7ecfbase64\u7f16\u7801\u4e4b\u540e\u7684NSData\u6570\u636e\u518d\u8f6c\u5316\u4e3aNSData\u6570\u636e\r\n- (instancetype)initWithBase64EncodedData:(NSData *)base64Data options:(NSDataBase64DecodingOptions)optionsNS_AVAILABLE(10_9, 7_0);\r\n\r\n\/\/39.\u7f16\u7801.\u5c06\u4e00\u4e2adata\u6570\u636e\u5229\u7528base64\u65b9\u6848\u8f6c\u5316\u6210base64\u4e4b\u540e\u7684NSData\u6570\u636e\r\n- (NSData *)base64EncodedDataWithOptions:(NSDataBase64EncodingOptions)options NS_AVAILABLE(10_9, 7_0);\r\n\r\n\u793a\u4f8b\u7a0b\u5e8f\uff1a\u4f7f\u7528\u7b2c\u4e00\u5bf9\u7f16\u7801\u89e3\u7801API\u3002\r\n        NSString * stringExample = [NSString stringWithFormat:@\"I Love You\"];\r\n    NSData * data1 = [stringExample dataUsingEncoding:NSUTF8StringEncoding];\r\n    \r\n    NSString * base64String   = [data1 base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];\r\n    NSLog(@\"Base64-encoded string is %@\",base64String);\r\n    \/\/log\uff08Base64-encoded string is SSBMb3ZlIFlvdQ==\uff09\uff1b\r\n\r\n    NSData * dataFromString = [[NSData alloc] initWithBase64EncodedString:base64String options:NSDataBase64DecodingIgnoreUnknownCharacters];\r\n    NSLog(@\"string is %@\",[NSString stringWithUTF8String:[dataFromString bytes]]); \r\n    \/\/log(string is I Love You);\r\n\r\n@end\r\n\r\n\/**************** Mutable Data\u53ef\u53d8data****************\/\r\n@interface NSMutableData : NSData\r\n\r\n\/\/40.\u53ef\u53d8data\u7684\u53ef\u53d8\u5b57\u8282\r\n@property (readonly) void *mutableBytes NS_RETURNS_INNER_POINTER;\r\n\r\n\/\/41.\u53ef\u53d8data\u7684\u957f\u5ea6\r\n@property NSUInteger length;\r\n@end\r\n\r\n@interface NSMutableData (NSExtendedMutableData)\r\n\r\n\/\/42.\u7ed9\u53ef\u53d8data\u8ffd\u52a0\u5b57\u8282\r\n- (void)appendBytes:(const void *)bytes length:(NSUInteger)length;\r\n\r\n\/\/43.\u7ed9data\u8ffd\u52a0\u5176\u4ed6\u7684data\r\n- (void)appendData:(NSData *)other;\r\n\r\n\/\/44.\u4e3a\u5df2\u7ecf\u5b58\u5728\u7684data\u8ffd\u52a0\u65b0\u7684\u957f\u5ea6\r\n- (void)increaseLengthBy:(NSUInteger)extraLength;\r\n\r\n       \u793a\u4f8b\u7a0b\u5e8f\uff1a\r\n      NSMutableData * data = [NSMutableData data];\r\n      [data increaseLengthBy:5];\r\n      NSLog(@\"dataLength\u2014\u2014\u2014%lu\",(unsigned long)data.length);\r\n\r\n\/\/45.\u7ed9data\u66ff\u6362\u5bf9\u5e94\u4f4d\u7f6e\u7684\u5b57\u8282\r\n- (void)replaceBytesInRange:(NSRange)range withBytes:(const void *)bytes;\r\n\r\n\/\/46.\u91cd\u7f6e\u53ef\u53d8data\u5bf9\u5e94\u4f4d\u7f6e\u7684\u5b57\u8282\r\n- (void)resetBytesInRange:(NSRange)range;\r\n\r\n\/\/47.\u4e3a\u53ef\u53d8data\u8bbe\u7f6edata\u6570\u636e\r\n- (void)setData:(NSData *)data;\r\n\r\n\/\/48.\u7ed9data\u66ff\u6362\u5bf9\u5e94\u4f4d\u7f6e\u7684\u5b57\u8282, \u5e76\u4e14\u5b58\u5728\u66ff\u6362\u957f\u5ea6\r\n- (void)replaceBytesInRange:(NSRange)range withBytes:(const void *)replacementBytes length:(NSUInteger)replacementLength;\r\n\r\n\r\n@end0\r\n\r\n@interface NSMutableData (NSMutableDataCreation)\r\n\r\n\/\/49.\u52a8\u6001\u521b\u5efa\u53ef\u53d8data \u5e76\u4e14\u521d\u59cb\u5316\u6307\u5b9a\u5927\u5c0f\r\n+ (instancetype)dataWithCapacity:(NSUInteger)aNumItems;\r\n\r\n\/\/50.\u52a8\u6001\u521b\u5efa\u53ef\u53d8data \u5e76\u4e14\u521d\u59cb\u5316\u6307\u5b9a\u957f\u5ea6\r\n+ (instancetype)dataWithLength:(NSUInteger)length;\r\n\r\n\/\/51.\u9759\u6001\u521b\u5efa\u53ef\u53d8data \u5e76\u4e14\u521d\u59cb\u5316\u6307\u5b9a\u5927\u5c0f\r\n- (instancetype)initWithCapacity:(NSUInteger)capacity;\r\n\r\n\/\/52.\u9759\u6001\u521b\u5efa\u53ef\u53d8data \u5e76\u4e14\u521d\u59cb\u5316\u6307\u5b9a\u957f\u5ea6 \r\n- (instancetype)initWithLength:(NSUInteger)length;\r\n\r\n@end\r\n\r\n\/\/1.data\u8bfb\u53d6\u8fc7\u7a0b\u7684\u53ef\u9009\u914d\u7f6e\u6761\u4ef6\r\ntypedef NS_OPTIONS(NSUInteger, NSDataReadingOptions) {\r\n    NSDataReadingMappedIfSafe =   1UL &lt;&lt; 0,    NSDataReadingUncached = 1UL &lt;&lt; 1, \r\n    NSDataReadingMappedAlways NS_ENUM_AVAILABLE(10_7, 5_0) = 1UL &lt;&lt; 3, \r\n       NSDataReadingMapped = NSDataReadingMappedIfSafe,\/\/ Deprecated name for NSDataReadingMappedIfSafe\r\n    NSMappedRead = NSDataReadingMapped,\/\/ Deprecated name for NSDataReadingMapped\r\n    NSUncachedRead = NSDataReadingUncached\/\/ Deprecated name for NSDataReadingUncached\r\n};\r\n\/\/2.data\u5199\u5165\u8fc7\u7a0b\u7684\u53ef\u9009\u914d\u7f6e\u6761\u4ef6\r\ntypedef NS_OPTIONS(NSUInteger, NSDataWritingOptions) {\r\n    NSDataWritingAtomic = 1UL &lt;&lt; 0,\r\n    NSDataWritingWithoutOverwriting NS_ENUM_AVAILABLE(10_8, 6_0) = 1UL &lt;&lt; 1, \r\n    NSDataWritingFileProtectionNoneNS_ENUM_AVAILABLE_IOS(4_0)                                  = 0x10000000,\r\n    NSDataWritingFileProtectionCompleteNS_ENUM_AVAILABLE_IOS(4_0)                              =0x20000000,\r\n    NSDataWritingFileProtectionCompleteUnlessOpenNS_ENUM_AVAILABLE_IOS(5_0)                    = 0x30000000,\r\n    NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication NS_ENUM_AVAILABLE_IOS(5_0)  = 0x40000000,\r\n    NSDataWritingFileProtectionMaskNS_ENUM_AVAILABLE_IOS(4_0)                                  = 0xf0000000,\r\n    NSAtomicWrite = NSDataWritingAtomic \r\n };\r\n\r\n\/**************** Data Search Options****************\/\r\n\/\/3.data\u5728\u641c\u7d22\u8fc7\u7a0b\u4e2d\u7684\u53ef\u9009\u914d\u7f6e\u6761\u4ef6\r\ntypedef NS_OPTIONS(NSUInteger, NSDataSearchOptions) {\r\n    NSDataSearchBackwards = 1UL &lt;&lt; 0,\r\n    NSDataSearchAnchored = 1UL &lt;&lt; 1\r\n} NS_ENUM_AVAILABLE(10_6, 4_0);\r\n\r\n\r\n@end<\/code><\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>NSData\u662fCocoa\u4e0b\u5bf9\u4e8c\u8fdb\u5236\u6570\u636e\u7684\u4e00\u4e2a\u5c01\u88c5(wrapper)\uff0c\u80fd\u591f\u628a\u4e8c\u8fdb\u5236\u7684\u6570\u636e\u5f53\u505a\u5bf9\u8c61\u6765\u5904\u7406 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[86,88],"tags":[87,89],"class_list":["post-988","post","type-post","status-publish","format-standard","hentry","category-macos","category-objective-c","tag-macos","tag-objective-c"],"views":2224,"_links":{"self":[{"href":"https:\/\/www.mustenaka.cn\/index.php\/wp-json\/wp\/v2\/posts\/988","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mustenaka.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mustenaka.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mustenaka.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mustenaka.cn\/index.php\/wp-json\/wp\/v2\/comments?post=988"}],"version-history":[{"count":6,"href":"https:\/\/www.mustenaka.cn\/index.php\/wp-json\/wp\/v2\/posts\/988\/revisions"}],"predecessor-version":[{"id":996,"href":"https:\/\/www.mustenaka.cn\/index.php\/wp-json\/wp\/v2\/posts\/988\/revisions\/996"}],"wp:attachment":[{"href":"https:\/\/www.mustenaka.cn\/index.php\/wp-json\/wp\/v2\/media?parent=988"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mustenaka.cn\/index.php\/wp-json\/wp\/v2\/categories?post=988"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mustenaka.cn\/index.php\/wp-json\/wp\/v2\/tags?post=988"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}