iOS開(kāi)發(fā)之基礎(chǔ)篇(8)—— NSData

版本

Xcode 8.2.1

簡(jiǎn)介

NSData為二進(jìn)制數(shù)據(jù),在文件操作(如保存到本地)、網(wǎng)絡(luò)、以及核心圖形圖像中使用較廣泛。

NSData的創(chuàng)建

    //對(duì)象方法創(chuàng)建
    NSData *data1 = [[NSData alloc] init];
    NSData *data2 = [[NSData alloc] initWithData:data1];

    //類方法創(chuàng)建
    NSData *data3 = [NSData data];
    NSData *data4 = [NSData dataWithData:data3];

    //由文件創(chuàng)建
    NSString *filePath = [NSHomeDirectory() stringByAppendingString:@"/Desktop/test.txt"];  
    NSData *data5 = [[NSData alloc] initWithContentsOfFile:filePath];
    NSData *data6 = [NSData dataWithContentsOfFile:filePath];

    // 由 URL 創(chuàng)建
    NSURL *urlPath = [NSURL URLWithString:[@"file://" stringByAppendingString:[NSHomeDirectory() stringByAppendingString:@"/Desktop/test.txt"]]];
    NSData *data7 = [[NSData alloc] initWithContentsOfURL:urlPath];
    NSData *data8 = [NSData dataWithContentsOfURL:urlPath];

    // 由 字符串 創(chuàng)建
    NSString *string = @"bei jing nin hao";
    NSData *data9 = [string dataUsingEncoding:NSUTF8StringEncoding];
    NSData *data10 = [string dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];

    // 可變 NSData 的創(chuàng)建
    // 初始化時(shí)指定對(duì)象擁有的字節(jié)空間大小,在需要時(shí)會(huì)增加內(nèi)存空間,在初始化時(shí)并沒(méi)有分配內(nèi)存空間
    NSMutableData *data11 = [[NSMutableData alloc] initWithCapacity:5];
    NSMutableData *data12 = [NSMutableData dataWithCapacity:5];

    // 初始化時(shí)為對(duì)象分配指定長(zhǎng)度的歸零字節(jié)
    NSMutableData *data13 = [[NSMutableData alloc] initWithLength:10];
    NSMutableData *data14 = [NSMutableData dataWithLength:10];

注:以上代碼原文地址http://www.cnblogs.com/QianChia/p/5782732.html#_label0

NSData與NSString、Byte、UIImage之間的轉(zhuǎn)換

    //NSString 轉(zhuǎn)換成 NSData
    NSString *str = @"Hello";
    NSData *strData = [str dataUsingEncoding:NSUTF8StringEncoding];

    //NSData 轉(zhuǎn)換成 NSString
    NSString *str1 = [[NSString alloc]initWithData:strData encoding:NSUTF8StringEncoding];

    //Byte 轉(zhuǎn)換成 NSData
    Byte byte[] = {1,2,3,4,5,6,7,8,9,10};  
    NSData *byteData = [[NSData alloc] initWithBytes:byte length:10];

    //NSData 轉(zhuǎn)換成 Byte 
    Byte *testByte = (Byte *)[byteData bytes]; 

    //UIImage 轉(zhuǎn)換成 NSData
    NSData *imageData1 = UIImagePNGRepresentation(UIImage *image);     //png 格式 
    NSData *imageData2 = UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality)  //jpeg格式  

    //NSData 轉(zhuǎn)換成 UIImage
    UIImage *aimage = [UIImage imageWithData: imageData]; 

NSMutableData刪除部分?jǐn)?shù)據(jù)

實(shí)驗(yàn)

    Byte byte[] = {1, 2 , 3, 4, 5};
    NSMutableData *dataM = [[NSMutableData alloc] initWithBytes:byte length:5];
    NSLog(@"原數(shù)據(jù) length:%d, dataM:%@", (int)dataM.length, dataM);
    [dataM resetBytesInRange:NSMakeRange(0, 3)];                                // 替換成0, 長(zhǎng)度不變
    NSLog(@"reset操作 length:%d, dataM:%@", (int)dataM.length, dataM);
    [dataM replaceBytesInRange:NSMakeRange(0, 2) withBytes:NULL length:0];      // 長(zhǎng)度改變, 真正刪除
    NSLog(@"replace操作 length:%d, dataM:%@", (int)dataM.length, dataM);刪除
    NSLog(@"replace操作 length:%d, dataM:%@", (int)dataM.length, dataM);
log:
原數(shù)據(jù) length:5, dataM:{length = 5, bytes = 0x0102030405}
reset操作 length:5, dataM:{length = 5, bytes = 0x0000000405}
replace操作 length:3, dataM:{length = 3, bytes = 0x000405}

結(jié)論:

// NSMutableData刪除部分?jǐn)?shù)據(jù)
[dataM replaceBytesInRange:NSMakeRange(0, 2) withBytes:NULL length:0];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容