前言 NSUserDefaults类,以字典形式保存数据,IOS会自动把字典中的键值对转换成对应的XML文件(也就是plist文件),这个文件会被保存到APP的沙盒目录中(路径为Library/Preferences...此时依然是'color'=='red'; 储存自定义对象 使用归档存储(真的储存) 一个NSUserDefaults的对象必须是属性表,这也就是说我们可以存储NSData,NSString,NSNUmber...如果你想存储其他类型的对象,我们可以将其归档并创建一个NSData来实现存储。...让这个自定义类实现协议中的 - (id) initWithCoder: (NSCoder *)coder方法和 - (void) encodeWithCoder: (NSCoder...*)coder方法 然后把该自定义的类对象编码到NSData中,再从NSUserDefaults中进行读取。
可以理解成键值对 有时在写数据之前,想判断下这个健是否已经设置过默认值 NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults...standardDefaults setObject:@"Green" forKey:@"favoriteColor"]; [standardDefaults synchronize]; } 其实可以使用...但是并不是所有类型的对象都能够直接放入 NSUserDefaults,NSUserDefaults 只支持 Foundation 类型的对象,如果自定义 NSObject 对象存入 NSUserDefaults...(nonatomic, copy) NSString *age; @property (nonatomic, copy) NSString *name; - (id)initWithCoder:(NSCoder...*)coder; - (void)encodeWithCoder:(NSCoder *)coder; @implementation Person - (id)initWithCoder:(NSCoder
举个例子,比如杂志、新闻、地图应用使用的数据库缓存文件和可下载内容应该保存到这个文件夹。 3.tmp: 只是临时使用的数据应该保存到 /tmp 文件夹。...读取和写入自定义对象 http://blog.csdn.net/chyroger/article/details/5785297 NSUserDefaults可以存取一些短小的信息。...如果把一个自定义的类存到一个NSArray里,然后再存到NSUserDefaults里也是不能成功的。不信可以试试,如果你成功的请告诉我。 那怎么办呢?...方法(obj-c的协议protocol就是java的接口interface,就是C++的纯虚函数),然后把该自定义的类对象编码到NSData中,再从NSUserDefaults中进行读取。...如果一个自定义类中由另一个自定义类对象,那么所有嵌套的类都要实现。
、preference(偏好设置) 3、NSKeyedArchiver归档(NSCoding) 4、SQLite3 5、Core Data 1、plist文件存储-(沙盒存储) 注意:不可以存储自定义对象...,一个对象能不能使用plist存储,可以通过看他有没有write to file方法 存入: // 获取沙盒路径 NSString *cachePath = NSSearchPathForDirectoriesInDomains...arrayWithContentsOfFile:filepath]; NSLog(@"%@", arr); 2、偏好设置-(沙盒存储) ** 1.不需要关心文件名** ** 2.快速做键值对存储..."name"]; NSLog(@"%@", str); 3、归档-(沙盒存储) 可以存储自定义对象 这里介绍自定义一个person对象 实现这份协议里面的方法让自定义对象里面的属性可以存储...)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:_name forKey:@"name"]; } // 读取name属性并赋值
在实际的项目开发中,数据持久化是我们必须要考虑的一个事情,如何把我们需要的数据进行持久化处理。...在此之前,一些轻量级的数据类型我一般比较喜欢用NSUserDefaults来存储,因为首先这是一个单例,而且使用简便,数据之间传递自由,所以很适合用来保存简单的数据。...而昨天我在实际工作中,有一个数组NSMutableArray需要存储,但是使用时,报了一个错误 reason: '*** -[NSUserDefaults setObject:forKey:]: attempt...那么对自定义对象的归档显得重要的多,因为很多时候我们都要在程序退出时保存数据,再程序恢复时重新加载,那么,归档便是一个好的选择。 接下来我们来讲讲NSKeyedArchiver的使用。...以上就是最简单的归档解档数据持久化的实现方式,至于如何用runtime进行自动归档解档,就又需要日后深入研究了。
读取时使用arrayWithContentsOfFile:方法 2.2 preference(偏好设置) preefrence(偏好设置)顾名思义就是用户在使用过程中对App的一些状态和自定义设置状态的保存...一般对于一些基本的用户设置,因为数据量很小,我们可以使用OC语言中的NSUserDefaults类来进行处理。使用方法很简单,只需要调用类中的方法即可。...2.3 NSKeyedArchiver(归档) 之前说了,不管是NSUserDefaults 或者是 plist 都不能对自定义的对象进行存储,OC提供了解归档恰好解决这个问题。...一个用来说明如何将对象编码到归档中,另一个说明如何进行解档来获取一个新对象。...但是沙盒中只能保存OC中的基本数据,自定义的对象不能直接存入,但是可以通过归档存为.data文件。
(4)SQLite3,当非常大量的数据存储时使用 (5)Core Data,就是对SQLite的封装 关于bundle路径和sandbox沙河路径: (1)bundle路径:应用程序 (APP)...路径获取: 通过NSUserDefaults类存取该目录下的设置信息 ---- 三、使用方法 1、属性列表 属性列表是一种XML格式的文件,拓展名为plist,如果对象是NSString、NSDictionary...、NSArray、NSData、NSNumber等类型,就可以使用, 注意:不能存储自定义对象,会失败的 存方法:writeToFile 读方法:如字典, dictionaryWithContentsOfFile...:@"key_name"]; 3、自定义对象归档 NSKeyedArchiver 注意: 必须遵守NSCoding协议的对象才可以进行归档解档,默NSString、NSDictionary、NSArray...:toFile:方法可以将一个对象直接写入到一个文件中,但有时候可能想将多个对象写入到同一个文件中,那么就要使用NSData来进行归档对象,NSData可以为一些数据提供临时存储空间,以便随后写入文件,
偏好设置 3)、NSKeydeArchiver归档(一般用来存储自定义对象) 4)、SQLite(关系型数据库,不能直接存储对象,使用sql语句序列化对象存储) 5)、Core Data...2)、使用偏好设置存储 /* 保存数据到用户偏好设置中 */ - (IBAction)saveDataToUserPreference:(id)sender{ NSUserDefaults *ud...3)、使用NSKeyedArchiver对自定义对象进行归档, 使用NSKeyedUnarchiver解析归档对象 首先自定义类需要实现NSCoding协议,然后实现方法 - (void...)encodeWithCoder:(NSCoder *)aCoder; //定义自定义类哪些属性需要归档,如何归档 - (id)initWithCoder:(NSCoder *)aDecoder...4)使用NSKeyedArchiver归档多个对象和解析 /* 使用NSKeyedArchiver归档多个对象 */ - (IBAction)saveMulObjectByArchive:(id)sender
1 NSUserDefault NSUserDefaults简介,使用 NSUserDefaults 存储自定义对象 http://my.oschina.net/u/1245365/blog/294449...3.1 对象归档 “归档”是值的另一种形式的序列化,对模型对象进行归档的技术可以轻松将复杂的对象写入文件,然后再从中读取它们,只要在类中实现的每个属性都是基本数据类型(如int或float...)或都是符合NSCoding协议的某个类的实例,你就可以对你的对象进行完整归档。...值”对编码来对希望包含在归档中的对象进行归档。...NSKeyedUnarchiver *archiver = [[NSKeyedUnarchiver alloc] initForReadingWithData: theData]; //使用与归档编码使用相同的键对象进行解码
4.手动存入到沙盒 5.plist文件 如果我们要存储自定义的对象,那么我们就需要使用归档了。...本篇博客告诉大家如何使用MJExtortion来快速地对自定义对象进行归档。...1.在自定义类中写一个宏MJCodingImplementation,此宏是实现了- (id)initWithCoder:(NSCoder )decoder方法和- (void)encodeWithCoder...:(NSCoder )encoder方法。...2.利用NSKeyedArchiver对自定义对象进行归档。
如果是NSString、NSNumber、NSData等基础类型可以直接存储在NSUserDefault,如果是自定义对象则需要实现NSCoding进行对象的序列化和反序列化。...FMDB FMDB对SQLite数据库进行封装,开放OC的接口便于开发者接入,是很普遍使用的iOS第三方数据库。 GitHub仓库地址,也可以使用pod接入。...为了保证数据安全,keychain内的数据都是经过加密。 keychain的使用 1、打开keychain的开关。 ?...此时可以使用iOS提供的keychain对敏感数据进行保存。keychain的数据是经过加密处理,具有较高的安全性。...在将对象转换成二进制数据,以及将二进制数据转换成对象时,可以使用系统提供的NSCoding协议,也可以使用第三方库YYModel。 所有代码GitHub可见,地址。
---- 偏好设置 其实就是我们平常使用的NSUserDefaults。...他的使用方法上跟字典差不多,不过它提供了一些对泛型的支持,示例代码如下: [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"male...因为不是面向对象的,所以使用起来难免有些冗长。这里我就不放示例代码了,找了一个专门写iOS 原生sqlite3的使用的博客,大家自己看下吧。...嘿嘿 FMDB FMDB是对sqlite3做的一层对象思想的封装。结构良好,执行效率比原生sqlite3并不逊色。优势在于他是面向对象的。...他的优势在于: 面向对象 无需考虑slq语句的组装 无需指定模型与数据表的对应关系 无入侵性,现有工程模型无需做修改,直接使用。 遵循协议后可自定义ORM映射关系、落库属性黑白名单等。
一个init的归档方法,一个encode的解归档方法,NSCoder就是归档对象。...2、几种归档与解归档的应用 (1)通过类方法来对rootKey进行归档 这种方式,我个人理解,很类似于NSUserDefaults中的standardUserDefaults,只是后者是系统为我们创建的一个默认...,是对单一的数据对象进行的归档,当然,这里的对象是支持数组、字典等集合的,但集合其中的对象,也必须全部支持归档操作。...(2)通过构造新的archiver对象,对多个对象进行归档 除了上面的类方法,我们还可以自己构造一个归档对象,来对多种不同的对象进行归档: NSString *homeDictionary...(3)进行自定义对象的归档 上面介绍中有提到,原则上,任何遵守了NSCoding协议的类都可以进行归档操作,那么对于我们自定义的对象,我们该如何来做呢?
1.1 沙盒的根目录下有三个常用的文件夹: 1.2 Library文件夹 1.3 tmp文件夹 1.4 standardUserDefaults 的使用 2.1 把字典对象 持久化保存到文件中 2.2...存储自定义类型对象到NSUserDefaults 3.1 基本用法 3.2 例子:创建一个处理数据库的工具类 3.3 数据库缓存性能进行优化 3.4 测试验证 前言 一般通过以下两种方式使用磁盘缓存:...:(NSString *)key{ return [[NSUserDefaults standardUserDefaults] objectForKey:key]; } 例子: 是否展示过版本新特性...,实现起来相对比较简单, 可以使用NSKeyedArchiver类将字典对象进行归档并写入文件,也可以使用NSJSONSerialization类把字典对象转换成JSON格式字符串写入文件。...文件缓存是不够灵活的,我们很难使用更细的粒度去操作数据,比如,很难对其中的某一条数据进行读和写操。 2.1 把字典对象 持久化保存到文件中 把字典对象 持久化保存到文件中
1.1 目录结构分析 1.2 应用沙盒目录的获取方式 1.3 偏好设置(standardUserDefaults 的使用) 1.4 存储自定义类型对象到NSUserDefaults 2.1 什么是Keychain...归档NSArray 5.1 FMDB例子 5.2 例子2:利用NSData归档2个Person对象到同一文件中 5.3 例子3:利用NSData实现深copy 6.1 基本用法 6.2 数据库缓存性能进行优化...类存取该目录下的设置信息 1.3 偏好设置(standardUserDefaults 的使用) 针对应用的字体大小、是否保存用户名等偏好设置,IOS的每个应用都有个NSUserDefaults实例,通过它来存取偏好设置...出现以上问题,可以通过调用synchornize方法强制写入 - (BOOL)synchronize; 偏好设置的好处 1、不用关心文件名 2、快速的进行键值对存储 偏好设置的工具方法 ---- +...] objectForKey: @"bShowIntroduce"]; return [numShowIntroduce boolValue]; } 1.4 存储自定义类型对象到NSUserDefaults
当用户进行注册、登录操作时,我们可以直接对密码进行MD5操作,用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,而系统并"不知道"用户的密码是什么。...加盐(Salt):在明文的固定位置插入随机串,然后再进行MD5 先加密,后乱序:先对明文进行MD5,然后对加密得到的MD5串的字符进行乱序。...三、HMAC加密 此加密方法需要先生成密钥,然后再对密码进行MD5和HMAC加密,数据库中需要存放当时使用的密钥和密码加密后的密文 在用户登陆时 再次对填入的密码用密钥进行加密 并且还要加上当前时间(...,判断当前设备是否支持指纹识别功能(是否带有TouchID) // 1> 实例化指纹识别对象 LAContext *laCtx = [[LAContext alloc] init];...1.本地数据加密 iOS应用防反编译加密技术之一:对NSUserDefaults,sqlite存储文件数据加密,保护帐号和关键信息 2.URL编码加密 iOS应用防反编译加密技术之二:对程序中出现的
NSInteger这种根据系统是64位还是32位来判断自己是int类型或者long类型,并且它也不是一个标准的OC对象,是不可以用NSUserDefaults来存储的。...3、归档 如果说NSUserDefault只能存储常用的数据类型,归档则可以存储常用数据类型外的自定义对象,并且安全性会高于上面两种方式,数据归档是进行加密(协议方法中的encode)处理的。...通过让存储的数据模型遵守NSCoding或NSSecureCoding(iOS 6以后)协议并且实现其两个协议方法使用NSKeyedArchiver对自定义的数据对象进行序列化。...Plist文件中的二进制格式文件数据则可以使用Plist文件编辑器(如plutil)进行查看或修改,即使在一个没有越狱的设备上,plist文件也可以通过工具iExplorer获取。...对于以编码、未加密或弱加密形式存储的敏感信息就可能会导致敏感信息泄露了。如果要存储一些相对较为敏感的数据可以采用Keychain方式存储。
适用场景:任何需要数据传递的场景都适用,但是传递数据的类型仅限于基本数据类型,不能用于自定义的对象类型。 传递方式:正向传值、反向传值。...使用步骤: 需要传值时将数据通过NSUserDefaults保存到沙盒目录里面 - (void) btnClicked:(UIButton *)btn { /* setObject...:YES]; } 需要使用值时通过NSUserDefaults从沙盒目录里面取值进行处理 _label.text = [[NSUserDefaults standardUserDefaults] valueForKey...:@"NSUserDefaults"]; 2.6 单例传值 方法描述:单例传值的性质和NSUserDefaults传值的性质类似,只是单例传值是将数据保存在单例对象中,需要的时候同样从单例对象中去获取数据使用就...@end 需要传递数据时使用单例类将数据保存到单例的属性中 [KLDanliObj shardDanLiObj].content = @"主界面传递的数据"; 需要使用值时通过单例的属性获取数据进行使用和处理
使用启动页进行加载或品牌化可能会减慢首次使用的时间,并使用户感觉应用程序运行缓慢。 当你新建 iOS 项目时,Xcode 会创建一个空白的 LaunchScreen.storyboard 供你使用。...如果你尝试使用任何其他自定义子类(例如 UserViewController),Xcode 将提示你禁止使用自定义类名。 ? 启动页 storyboard不能包含非 UIKit 标准类。...这两种方法让我们指定需要保存或加载的数据以及如何对它们进行编码或解码。...再次启动应用程序并检查状态是否已成功还原。 由于本节仅涵盖了状态保存和恢复的基础知识,因此我推荐 Apple Inc. 上的以下文章。...你可能曾经使用过突然对你的操作停止响应的应用程序,就好像应用程序已挂起。这很可能是因为应用程序在主线程上运行繁重的计算任务。
需要实现的需求如下: 首次登录使用密码或第三方登录 登录完成后开启生物验证 对已开启生物验证的用户可免密登录 可使用多设备登录 用户token密文传输(RSA加密) 可在无网络的情况下个人信息的展示 需求整理完之后我想说产品你...(注:有些极少数用户会选择越狱,你保存的信息就会成明文信息), 使用有一点需要注意,所缓存的对象一定要遵守NSCoding协议,且该协议无法在extension中使用.如果大量使用归档建议使用runtime...} RSA加密 由于涉及到了密码登录,按要求密码不能明文传输。最终选择使用RSA来进行加解密。现在很多APP都是手机验证码登录应该就不涉及到加密问题,就可以跳过了,按需索取吧。...本人试过很多版本,也尝试着去了解RSA这个非对称加密,在iOS系统中用Security库来实现加密算法。 其实只要了解该加密算法是使用一对秘钥,公钥是用来加密的,私钥是用来解密的就好了。...只要使用pod来引入就可以了,该库也是使用swift编写的。 pod 'SwiftyRSA' 依旧是核心代码,没什么好解释的. 需要注意秘钥字符串必须使用base64编码。