iOS的永久存储

摘要:
iOS中的永久存储也是相对的。当用户不恢复或恢复设备时,某些数据可以永久存储。可以通过GUID值3找到作者的信息。UDID的全名是UniqueDeviceIdentifier。顾名思义,它是苹果IOS设备的唯一识别码,由40个字母和数字组成。当然,这不会影响永久存储,也没有必要与其他应用程序共享这些数据。

iOS中的永久存储也是相对的(以下所讲的永久存储也是如此),在用户不对设备进行恢复或还原操作时,部分数据是可以做到永久存储的(即应用被删除后重新安装数据不会丢失,在替代UUID方法中较为有效)。

几个概念:

1.UUID: (Universally Unique Identifier) 通用唯一标识符,是一个标识符标准用于软件架构,由开放软件基金会(OSF)作为分布式计算环境(DCE)的一部分而制作的标准。

              UUID的目的是让分布式系统中的所有元素都能有唯一的辨识资讯,不需要透过中央控制端来做辨认资讯的制定。如此一来每个人都建立一个与其他人不同的标

              识符,这样在存储到数据库中时,就不用担心名称相同的事情(功能类似数据库中的主键,但是数据库的主键只是在一张表中有效).

              这个标准现在被广泛应用在微软的全球唯一标识上面(GUID)。

     标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx (8-4-4-4-12)

2.GUID:(Globally Unique Identifier) 全球唯一标识符,是一个假随机数用于软件中

(1). 全球唯一性:世界上两台计算机生成的GUID都不相同,GUID主要用于拥有多个节点、多台计算机组成的计算机网络和系统中,分配具有唯一性的标志符。

          在时间和空间上都能保证唯一性,保证在同一时间不同的地点生成的GUID值不同。

(2). 组成结构:通过特定算法生成的一个二进制长度为为128的字符串,在用GUID时是由算法自动生成,不需要任何机构来帮助。

          GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。

          例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID 值。------>一个16进制是4个二进制,所以共32位。

(3). 应用:世界上所有用户的每一个Office文档计算机都会自动生成一个GUID值,并作为这个Office的唯一标识符;而且这个GUID值与计算机的网卡是相关的,

         但是这个GUID值对作者是不可见的。作者的信息可以通过GUID的值找到

3.UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和数字组成。

1、UIPasteboard 粘贴板

UIPasteboard最初被设计就是用于开发者的一组应用间的数据共享,当实际上iOS7之前的UIPasteboard只要应用知道其名字,即可访问其中的内容,而OpenUDID的实现方式也依赖于此,让开发者能使用一组UUID来标记一个设备。

iOS7之后,+[UIPasteboard pasteboardWithName:create:]+[UIPasteboard pasteboardWithUniqueName]这两个方法产生的UIPasteboard仅供同组应用之间共享数据,也就是Info.plistCFBundleIdentifier字段的前两段标识(例如com.yourcompany.xxcom.yourcompany)相同的应用才能相互共享数据。不同组应用之间相同名字的UIPasteboard是不同的,而不是以前的同一个。当然这并不影响永久存储,并且这些数据也没有必要和其它应用共享。

iOS上不只一个粘帖板:
有两个系统粘帖板:一个通用系统粘帖板用于复制/粘贴操作,一个查找粘帖板保存上一次搜寻用的字符串。
另外,应用程序还可以创建自己的粘帖板,甚至可以被其他应用程序使用。例如,零售机程序以及信用卡终端程序可以使用共享粘帖板来传递支付信息。

最常用的粘帖板操作包括获取/设置字符串,图像,URL和颜色。Apple提供了以下方便的方法:

使用通用粘帖板
    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];

查找粘贴板

获取

UIPasteboard *pb = [UIPasteboard pasteboardWithName:@"testBoard" create:NO];  

NSDictionary *dict = [NSKeyedUnarchiver unarchiveObjectWithData:[pb dataForPasteboardType:@"myType"]];  

caption.text = [dict objectForKey:@"content"];

存储

UIPasteboard *pb = [UIPasteboard pasteboardWithName:@"testBoard" create:YES];  

NSDictionary *dict = [NSDictionary dictionaryWithObject:textField.text forKey:@"content"];  

NSData *dictData = [NSKeyedArchiver archivedDataWithRootObject:dict];  

[pb setData:dictData forPasteboardType:@"myType"];  

2.KeyChain

iOS的keychain服务提供了一种安全的保存私密信息(密码,序列号,证书等)的方式,每个ios程序都有一个独立的keychain存储。相对于NSUserDefaults、文件保存等一般方式,keychain保存更为安全,而且keychain里保存的信息不会因App被删除而丢失,所以在重装App后,keychain里的数据还能使用。从ios 3.0开始,跨程序分享keychain变得可行。

如何需要在应用里使用使用keyChain,我们需要导入Security.framework ,keychain的操作接口声明在头文件SecItem.h里。直接使用SecItem.h里方法操作keychain,需要写的代码较为复杂,为减轻咱们程序员的开发,我们可以使用一些已经封装好了的工具类,下面我会简单介绍下我用过的两个工具类:KeychainItemWrapper和SFHFKeychainUtils(下载)。

创建

KeychainItemWrapper *keychain=[[KeychainItemWrapper allocinitWithIdentifier:@"xxxxxx" accessGroup:nil];//xxxx 自定义

保存

[keyWrapper setObject:@"myChainValues" forKey:(id)kSecAttrService];

[keyWrapper setObject:[usernameTextField textforKey:(id)kSecAttrAccount];// 上面两行用来标识一个Item

[keyWrapper setObject:[passwordTextField textforKey:(id)kSecValueData];

读取

[usernameTextField setText:[keyWrapper  objectForKey:(id)kSecAttrAccount]];

[passwordTextField setText:[keyWrapper objectForKey:(id)kSecValueData]];

另外需要引入Security.framework 和KeychainItemWrapper头文件

KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"Account Number"    

                                                                   accessGroup:@"YOUR_APP_ID_HERE.com.yourcompany.AppIdentifier"];     

//保存帐号   

[wrapper setObject:@"<帐号>" forKey:(id)kSecAttrAccount];     

//保存密码   

[wrapper setObject:@"<帐号密码>" forKey:(id)kSecValueData];     

//从keychain里取出帐号密码   

NSString *password = [wrapper objectForKey:(id)kSecValueData];       

//清空设置   

[wrapper resetKeychainItem];   

参考:iOS7 Release Note提到的一些变更  使用UIPasteboard复制/粘帖 UUID和GUID

免责声明:文章转载自《iOS的永久存储》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇数据挖掘实践(19):算法基础(二)Logistic回归(逻辑斯蒂)算法.NetCore 简单的使用中间件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

VS2015更改生成程序exe的默认图标

用VS2015生成了一个exe程序HJDemo.exe,默认的图标,如下图,就是这个长了耳朵的田字格图案  更改后效果图如下: 更改图标步骤: 1、制作一张ico格式的logo图片 选择一张目标图片,百度 在线ico制作,将图片转为ico格式,我用的这个连接https://tool.lu/favicon/,上传照片,拖拽出想要的区域,底部像素推荐48...

APP的UI自动化测试框架及平台化探索

顾铮,10年+测试及测试开发相关经验,2014年加入京东,曾主导设计开发UI测试框架,参与CI测试平台建设,现负责iOS侧的工具,框架建设。在UI自动化,性能测试,单元测试方面有较深入研究,在App,web端等有较丰富的测试开发和设计经验。 >>>> 写在前面 关于UI测试的文章,多数是通过架构的演进,或是重构,或是推翻重做来讲述的...

NEXUS S安卓4.0/4.1 【完美】 ROOT教程

原文链接:http://bbs.gfan.com/android-3517082-1-1.html 进行bootloader解锁(即使解锁,再上锁),会清除你手机上的【所有】数据(包括内部的16G SD 存储),包括但不限于应用、设置、联系人和账户等,请做好数据备份!·理论上对各种版本、各种机型的ROM都可以获取ROOT权限。·关于Busybox,麻烦各位...

SAP ERP 与 Oracle ERP 比较

本报告对SAP和ORACLE两家公司的ERP产品,从公司实力、软件功能、产品成熟度、产品技术和产品实施等几个纬度进行比较,以使企业能够更好的了解哪个产品更适合自己。     1:软件产品的成熟度     § SAP:经过近30年与全球大企业用户的合作,SAP系统积累了大量先进企业的业务管理流程。对于用户来说,只需根据在系统中挑选适当的业务流程,在软件中进...

oracle数据库的一次异常起停处理。

在重启数据库的时候,忘记把一个应用关停了,想起来的时候,就ctrl+c,把数据库shutdown immediate 给强制停下了,把该应用再停止,然后shutdown immdiate,这时候数据报错了。 oracle@NMSSERVER1:~> sqlplus '/as sysdba' SQL*Plus: Release 11.2.0.3.0 P...

教您在CorelDRAW中安装字体

在平面设计中,对字体的把控是至关重要的,一个设计作品中,选择合适的字体能为设计添上浓墨重彩的一笔。平面设计中视觉上的美观是一方面,而更重要的则是信息的传达。文字、图形、色彩是平面设计信息传达的三要素,字体设计又是这三要素中的重要因素之一。许多人都喜欢用CorelDRAW软件设计画册、设计海报等等,要进行平面设计,就会用到许多不同的字体。如果字体样式单一,就...