前言

	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))

iOS - Swift NSData 数据的更多相关文章

  1. iOS - OC NSData 数据

    前言 @interface NSData : NSObject <NSCopying, NSMutableCopying, NSSecureCoding> @interface NSMut ...

  2. iOS - Swift PList 数据存储

    前言 直接将数据写在代码里面,不是一种合理的做法.如果数据经常改,就要经常翻开对应的代码进行修改,造成代码扩展性低.因此,可以考虑将经常变的数据放在文件中进行存储,程序启动后从文件中读取最新的数据.如 ...

  3. iOS - Swift NSKeyedArchiver 数据归档

    前言 public class NSKeyedArchiver : NSCoder public class NSKeyedUnarchiver : NSCoder 在 OC 语言中,归档是一个过程, ...

  4. iOS - Swift NSUserDefaults 数据存储

    前言 public class NSUserDefaults : NSObject 用来保存应用程序设置和属性.用户保存的数据.用户再次打开程序或开机后这些数据仍然存在.如果往 userDefault ...

  5. php接口 接受ios或android端图片; php接收NSData数据

    备注下, [自己无意中用的方法]接收时,设置两个参数,一个是图片名称,另一个是实际文件.然后用$_FILES处理就可以了. 如: $icon = $_POST['icon'];//这个是图片的名称,用 ...

  6. iOS swift项目IM实现,从长连接到数据流解析分析之Socket

    iOS  swift项目IM实现,从长连接到底层数据解析分析之Socket 一:项目简介:  去年开始接手了一个国企移动项目,项目的需求是实现IM即时通讯功能. * 一期版本功能包括了:       ...

  7. iOS开发网络数据之AFNetworking使用

    iOS开发网络数据之AFNetworking使用 如何选择AFNetworking版本 首先得下载AFNetworking库文件,下载时得首先弄清楚,你将要开发的软件兼容的最低版本是多少.AFNetw ...

  8. iOS学习——JSON数据解析(十一)

    在之前的<iOS学习——xml数据解析(九)>介绍了xml数据解析,这一篇简单介绍一下Json数据解析.JSON 即 JavaScript Object Natation,它是一种轻量级的 ...

  9. IOS开发中数据持久化的几种方法--NSUserDefaults

    IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefaul ...

随机推荐

  1. javascript || and &&

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. React-Native入门指导之iOS篇

    React-Native 入门指导系列教程目录 一.准备工作 (已完成) 二.项目介绍与调试 三.CSS样式与Flex布局 四.常用UI控件的使用 五.JSX在React-Native中的应用 六.事 ...

  3. ado.net基础思想-abstract

    抽象类用做基类不能被实例化用途是派生出其他非抽象类 接口主要是实现多重继承 abstract 修饰符用于表示所修饰的类是不完整的,并且它只能用作基类.抽象类与非抽象类在以下方面是不同的:• 抽象类不能 ...

  4. Out of Hay

    Out of Hay Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13094 Accepted: 5078 Descripti ...

  5. 使用jquery再次封装ajax

    $.fn.ajaxSend = function (type, url, postdata, onSuccess) { $.ajax({ async: false, url: url, type: t ...

  6. zend studio 注释快捷键

    使用zend studio编写程序时,我们经常要做一些注释.zend studio为我们提供了行注释和块注释的快捷键ctrl+slash和ctrl+shift+slash,开始不明白什么是slash, ...

  7. linux poll 学习

    一.poll介绍 函数原型: #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int timeout); struc ...

  8. 【转】Ajax中send方法参数的使用(get/post)

    Ajax中send方法参数的使用 一般情况下,使用Ajax提交的参数多是些简单的字符串,可以直接使用GET方法将要提交的参数写到open方法的url参数中,此时send方法的参数为null. 例如 : ...

  9. 【转载】20分钟MySQL基础入门

    原文:20分钟MySQL基础入门 这里持续更新修正 开始使用 MySQL 为关系型数据库(Relational Database Management System),一个关系型数据库由一个或数个表格 ...

  10. linux mv命令

    mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 1.命令格式: mv [选项] 源文件或目 ...