让NSUserDefaults使用起来像对象一样容易

让NSUserDefaults使用起来像对象一样容易

巧妙的设计,是为了简化开发提升效率而存在。

 

设计要点:

1. 单例模式

2. 重写setter,getter方法

3. 专门的类来管理单例

 

使用时候的详情:

源码:

SharedInstance.h 与 SharedInstance.m

//
//  SharedInstance.h
//  NSUserDefault
//
//  Created by YouXianMing on 14/12/5.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "NSUserDefaultsObject.h"

/**
 *  单例管理器
 */
@interface SharedInstance : NSObject

+ (NSUserDefaultsObject *)defaultsObject;

@end
//
//  SharedInstance.m
//  NSUserDefault
//
//  Created by YouXianMing on 14/12/5.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "SharedInstance.h"

static NSUserDefaultsObject *_defaultObject = nil;

@implementation SharedInstance

/**
 *  构造单例的类方法
 */
+ (void)initialize {
    if (self == [SharedInstance class]) {
        _defaultObject = [NSUserDefaultsObject new];
    }
}

+ (NSUserDefaultsObject *)defaultsObject {
    return _defaultObject;
}

@end

NSUserDefaultsObject.h 与 NSUserDefaultsObject.m

//
//  NSUserDefaultsObject.h
//  NSUserDefault
//
//  Created by YouXianMing on 14/12/5.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSUserDefaultsObject : NSObject

@property (nonatomic, strong) NSString  *name;

@end
//
//  NSUserDefaultsObject.m
//  NSUserDefault
//
//  Created by YouXianMing on 14/12/5.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "NSUserDefaultsObject.h"

@implementation NSUserDefaultsObject

#pragma mark - 重写setter,getter方法
@synthesize name = _name;
- (void)setName:(NSString *)name {
    [[NSUserDefaults standardUserDefaults] setValue:name forKey:@"name"];
}
- (NSString *)name {
    return [[NSUserDefaults standardUserDefaults] valueForKey:@"name"];
}

@end

核心源码:

时间: 2024-12-21 17:44:40

让NSUserDefaults使用起来像对象一样容易的相关文章

iOS程序员必须知道的Android要点

iOS程序员必须知道的Android要点 2014/05/06 | 分类: ANDROID, 开发 | 0 条评论 | 标签: ANDROID 本文由 伯乐在线 - chris 翻译自 objc.欢迎加入Android小组.转载请参见文章末尾处的要求. 本博客英文原文副本 http://blog.csdn.net/opengl_es/article/details/25243257 在移动应用飞速发展的今天,APP只针对IOS平台进行开发已经不够了,如今Android在移动设备占有近80%的市场

IOS通过NSUserDefaults实现简单的应用间数据传递

IOS中NSUserDefaults详解 NSUserDefaults是用于保存应用程序设置,应用信息等轻量级数据的的一个类,其本质是将数据写为plist文件的形式保存在本地.在IOS中,系统为每一个应用程序都默认创建了一个NSUserDefaults对象. 一.常用方法总结 + (NSUserDefaults *)standardUserDefaults; 获取系统默认创建的应用程序设置表 + (void)resetStandardUserDefaults; 这个方法用于将内存中存储的数据写入

Swift: 用UserDefaults保存复杂对象

一直木有看过这个细节,用UserDefaults是能不能存复杂一点的对象.大家可能都看到过UserDefaults的一个方法setObject: forKey:,用这个方法存过NSDictionary,NSArray什么的,也存过字符串. 偶然一次直接存了一个继承自JSONModel的实体类,然后就悲剧了.后来查了下苹果的文档: The value parameter can be only property list objects: NSData, NSString,  NSNumber, 

[IOS]NSUserDefaults读取和写入

NSUserDefaults可以存取一些短小的信息. 比如存入再读出一个字符串到NSUserDefaults: [cpp] view plaincopy NSString *string = [NSString stringWithString @"hahaha"];   NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];   [ud setObject:string forKey:@"myKey"

iOS - Swift NSUserDefaults 数据存储

前言 public class NSUserDefaults : NSObject 用来保存应用程序设置和属性.用户保存的数据.用户再次打开程序或开机后这些数据仍然存在.如果往 userDefaults 里存了一个可变数组,取出来的时候这个数组对象就变成了不可变的. NSUserDefaults 可以存储的数据类型包括:NSData.NSString.NSNumber.NSDate.NSArray.NSDictionary.如果要存储其他类型,则需要转换为前面的类型,才能用 NSUserDefa

iOS - OC NSUserDefaults 数据存储

前言 @interface NSUserDefaults : NSObject 用来保存应用程序设置和属性.用户保存的数据.用户再次打开程序或开机后这些数据仍然存在.如果往 userDefaults 里存了一个可变数组,取出来的时候这个数组对象就变成了不可变的. NSUserDefaults 可以存储的数据类型包括:NSData.NSString.NSNumber.NSDate.NSArray.NSDictionary.如果要存储其他类型,则需要转换为前面的类型,才能用 NSUserDefaul

VB.NET中有用的通用对象列表

要使用List(of T),我们需要了解如何部署.NET框架所提供的多种方法.这也将是本文要介绍的内容.我已经编写好了三个示例--使用ForEach, FindAll,和Sort--来阐述同样列表类的工作原理. 第一步是要创建一个同用列表.你可以从多种途径获取数据,但是最简单的方法是添加.文本中,我们会编写代码以便为举例中的集来分类.因此,下面我们就来讲讲创建集的代码. 首先,我需要一个能代表集中的Bottle的对象.为此而编写的代码是完全符合标准的,而且事实上,VB.NET 2008 Expr

[Java] 方法锁、对象锁和类锁的意义和区别

版权声明:请尊重个人劳动成果,转载注明出处,谢谢! 目录(?)[+] 首先的明白Java中锁的机制 synchronized  在修饰代码块的时候需要一个reference对象作为锁的对象.  在修饰方法的时候默认是当前对象作为锁的对象.  在修饰类时候默认是当前类的Class对象作为锁的对象.   线程同步的方法:sychronized.lock.reentrantLock分析 方法锁(synchronized修饰方法时) 通过在方法声明中加入 synchronized关键字来声明 synch

C#对象序列化和反序列化

C#对象序列化和反序列化,如下代码示例: using System;  using System.Text;  using System.Collections.Generic;  using System.IO;  using System.Runtime.Serialization.Formatters.Binary;    class SerializableOperate  {      private static void ObjectSerializable(object obj,