iOS - Swift NSData 数据

简介: 前言 public class NSData : NSObject, NSCopying, NSMutableCopying, NSSecureCoding public class NSMutableData : NSDataNSData 和它的可变长子类 NSMutableData 是字节缓冲区的对象化封装。

前言

    public class NSData : NSObject, NSCopying, NSMutableCopying, NSSecureCoding
    public class NSMutableData : NSData
  • NSData 和它的可变长子类 NSMutableData 是字节缓冲区的对象化封装。我们可以获得简单缓冲区,并进行一些转换操作。通常我们并不会直接创建字节数据,而是从其他类型的内容转换成字节数据。

  • 所谓简单缓冲区,就是缓冲区内只包含数据,无内嵌指针。

1、NSData 的创建

    // 由字符串创建
    let swiftString:String = "Hello World"
    let nsString:NSString = "hello world"
        
    // allowLossyConversion 表示在转换过程中是否允许字符进行必要的删减或者替换  
    let data1:NSData? = swiftString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
    let data2:NSData? = nsString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
    
    // 由已知数据创建,两个对象的地址不相同
    let data3:NSData = NSData(data: data1!)
        
    // 由文件创建
    let data4:NSData? = NSData(contentsOfFile: NSHomeDirectory().stringByAppendingString("/Desktop/test.txt"))
        
    // 由 URL 创建
    let data5:NSData? = NSData(contentsOfURL: NSURL(string: "http://www.baidu.com")!)
        
    // 可变 Data 的创建
            
        // 初始化时指定对象拥有的字节空间大小,在需要时会增加内存空间,在初始化时并没有分配内存空间
        let data6:NSMutableData? = NSMutableData(capacity: 0)
            
        // 初始化时为对象分配指定长度的归零字节
        let data7:NSMutableData? = NSMutableData(length: 10)

2、数据的长度

    let data1:NSData = "Hello World".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!
        
    // 指定空间大小,不分配空间
    let data2:NSMutableData = NSMutableData(capacity: 10)!
        
    // 分配指定长度的归零字节
    let data3:NSMutableData = NSMutableData(length: 10)!
        
    // 字节长度的计算,NSData 的 length 属性是只读的,字节长度的计算,NSMutableData 的 length 可以被重新赋值
    let num1:Int = data1.length
    let num2:Int = data2.length
    let num3:Int = data3.length
        
    // 重新设置空间的大小,对象的字节空间会相应的扩充或者截断。如果新设置的大小大于当前大小,
    // 会在当前数据的末尾处用归零字节来进行填充。如果新设置的大小小于当前大小,数据会被截断抛弃。
    data2.length = 5
    data3.length = 5
    
    // 扩充指定长度,新添加的空间被设置为归零字节
    data2.increaseLengthBy(7)
    data3.increaseLengthBy(7)

3、数据的获取

    let data:NSData = "Hello World".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!
        
    // 默认为内容数据的十六进制编码
    let dataFromNSData1 = data.description                      
        
    let dataFromNSData2:NSString? = NSString(data: data, encoding: NSUTF8StringEncoding)
        
    let dataFromNSData3:NSString? = NSString(bytes: data.bytes, length: data.length, encoding: NSUTF8StringEncoding)

4、NSData 的比较

    let data1:NSData = "Hello World".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!
    let data2:NSData = NSData(data: data1)
        
    // 比较两个对象的地址是否一致
    let bl1:Bool = data1 === data2
        
    // 比较两个对象的长度及每字节的数据是否相同
    let bl2:Bool = data1.isEqualToData(data2)

5、NSData 的存储

    let data:NSData = "Hello World".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!
        
    // 将数据写入 file
    let bl1:Bool = data.writeToFile(NSHomeDirectory().stringByAppendingString("/Desktop/test.txt"), atomically: true)
        
    // 将数据写入 URL,该方法只支持 file:// 路径的文件写入,并不能对远程如 http:// 等类型文件进行写入
    let bl2:Bool = data.writeToURL(NSURL(string: "file://".stringByAppendingFormat("%@%@", 
                                                         NSHomeDirectory(), "/Desktop/test.txt"))!, atomically: true)

6、NSData 与 字符串 的相互转换

    let string:String = "Hello World"
        
    // 字符串 转 NSData
    let data:NSData = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!
        
    // NSData 转 字符串
    let utf8String:NSString = NSString(data: data, encoding: NSUTF8StringEncoding)!

7、NSData 与 Base64编码字符串 的相互转换

    let data:NSData = "Hello World".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!
        
    // NSData 转换为 Base64编码的字符串
    let base64String:String = data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
        
    // Base64编码的字符串 转换为 NSData
    let nsData:NSData? = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0))
目录
相关文章
|
8天前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
111 2
|
8天前
|
存储 iOS开发 开发者
使用克魔助手进行iOS数据抓包和HTTP抓包的方法详解
使用克魔助手进行iOS数据抓包和HTTP抓包的方法详解
52 0
|
1天前
|
Java iOS开发
iOS的数据序列化(又称持久化)的两类使用方式
iOS的数据序列化(又称持久化)的两类使用方式
7 0
|
8天前
|
存储 Swift iOS开发
使用Swift开发一个简单的iOS应用的详细步骤。
使用Swift开发iOS应用的步骤包括:创建Xcode项目,设计界面(Storyboard或代码),定义数据模型,实现业务逻辑,连接界面和逻辑,处理数据存储(如Core Data),添加网络请求(必要时),调试与测试,根据测试结果优化改进,最后提交至App Store或其它平台发布。
40 0
|
8天前
|
API 数据库 Swift
【Swift开发专栏】Swift中的数据持久化:Core Data与Realm
【4月更文挑战第30天】本文探讨了Swift中两种流行的数据持久化框架——Core Data和Realm。数据持久化是保持应用数据在不同运行周期间一致性的关键。Core Data,苹果的ORM系统,适合处理复杂数据关系,提供与iOS生态系统的无缝集成。使用Core Data涉及定义数据模型、生成NSManagedObject子类、配置持久化容器及执行数据操作。而 Realm,一个轻量级数据库,以其高性能、易于使用的API和实时数据同步适用于跨平台项目。在Swift中使用Realm,需定义数据模型、配置Realm实例、执行数据操作并观察数据变化。理解这两者能帮助开发者构建更高效、可靠的应用。
|
8天前
|
安全 Swift iOS开发
【Swift 开发专栏】Swift 与 UIKit:构建 iOS 应用界面
【4月更文挑战第30天】本文探讨了Swift和UIKit在构建iOS应用界面的关键技术和实践方法。Swift的简洁语法、类型安全和高效编程模型,加上与UIKit的紧密集成,使开发者能便捷地创建用户界面。UIKit提供视图、控制器、布局、动画和事件处理等功能,支持灵活的界面设计。实践中,遵循设计原则,合理组织视图层次,运用布局和动画,以及实现响应式设计,能提升界面质量和用户体验。文章通过登录、列表和详情界面的实际案例展示了Swift与UIKit的结合应用。
|
8天前
|
存储 安全 Swift
【Swift 开发专栏】使用 Swift 开发一个简单的 iOS 应用
【4月更文挑战第30天】本文介绍了使用 Swift 开发简单 iOS 待办事项应用的步骤。首先,阐述了 iOS 开发的吸引力及 Swift 语言的优势。接着,详细说明了应用的需求和设计,包括添加、查看和删除待办事项的功能。开发步骤包括创建项目、界面搭建、数据存储、功能实现,并提供了相关代码示例。最后,强调了实际开发中需注意的细节和优化,旨在帮助初学者掌握 Swift 和 iOS 开发基础。
|
8天前
|
移动开发 小程序 API
uniapp通过蓝牙传输数据 (ios)
uniapp通过蓝牙传输数据 (ios)
57 1
|
8天前
|
监控 API Swift
用Swift开发iOS平台上的上网行为管理监控软件
在当今数字化时代,随着智能手机的普及,人们对于网络的依赖日益增加。然而,对于一些特定场景,如家庭、学校或者企业,对于iOS设备上的网络行为进行管理和监控显得尤为重要。为了满足这一需求,我们可以利用Swift语言开发一款iOS平台上的上网行为管理监控软件。
214 2
|
8天前
|
Web App开发 网络安全 Android开发
🚀2023最新版克魔助手抓包教程(9) - 克魔助手 IOS 数据抓包
在移动应用程序的开发中,了解应用程序的网络通信是至关重要的。数据抓包是一种很好的方法,可以让我们分析应用程序的网络请求和响应,了解应用程序的网络操作情况。克魔助手是一款非常强大的抓包工具,可以帮助我们在 Android 和 iOS 平台上进行数据抓包。本篇博客将介绍如何使用克魔助手在 iOS 平台上进行数据抓包。

相关课程

更多