iOS--NSUserDefaults

一、基本概念

1、之前如果我们想要实现一个对象支持整个应用程序访问,需要自己创建一个单例对象,而其实iOS系统内部给我们提供了这个一个单例类,NSUserDefaults,用来保存一些整个应用程序都能访问到的数据

2、保存到NSUserDefaults对象的内容都被放在沙盒Library/Oreferences文件夹中

3、对这个NSUserDefaults对象进行操作,就相当于对文件进行操作

4、NSUserDefaults对象的存取方式和字典类似

二、用法

1、通过单例方法找到NSUserDefault对象

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

2、用NSUserDefault对象存储数据,因为数据最终是存放在plist文件中,所以在这里可以存储plist里面支持的数据类型,存取方式和字典类似

[defaults setInteger:12 forKey:@"age"];

3、用NSUserDefault对象取数据

[defaults integerForKey:@"age"];

4、用NSUserDefault对象移除偏好设置里面的数据

[defaults removeObjectForKey:nil];

三、宏定义与NSUserDefault的搭配使用

1、存值

#define kSaveMyDefault(A,B) [[NSUserDefaults standardUserDefaults] setObject:B forKey:A]

2、取值

#define kFetchMyDefault(A) [[NSUserDefaults standardUserDefaults] objectForKey:A]

四、练习

1、应用第一次启动有新手教程

1) 打开模拟本地缓存的工程

2)创建继承与UIViewController的控制器FirstLaunchViewController,用来做欢迎界面,.m文件如下

#import "FirstLaunchViewController.h"

#import "AppDelegate.h"

@interface FirstLaunchViewController ()

@end

@implementation FirstLaunchViewController

- (void)viewDidLoad {

[super viewDidLoad];

self.view.backgroundColor = [UIColor whiteColor];

UILabel *welcomeLabel = [[UILabel alloc]initWithFrame:self.view.frame];

welcomeLabel.text = @"欢迎您";

welcomeLabel.font = [UIFont boldSystemFontOfSize:20];

welcomeLabel.textAlignment = NSTextAlignmentCenter;

[self.view addSubview:welcomeLabel];

}

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event{

//获取到应用程序的appDelegate

AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;

//在AppDelegate方法内给重新设置window的主窗口

[appDelegate setWindowRootVC];

}

@end

3)AppDelegate.h    

  #import

@interface AppDelegate : UIResponder

@property (strong, nonatomic) UIWindow *window;

//声明一个用来切换window主窗口的window

- (void)setWindowRootVC;

@end

4) 修改AppDelegate.m的内容如下

#import "AppDelegate.h"

#import "ViewController.h"

#import "FirstLaunchViewController.h"

//通过宏定义让偏好设置存取值

#define kSaveMyDefault(A,B) [[NSUserDefaults standardUserDefaults] setObject:B forKey:A]

#define kFetchMyDefault(A) [[NSUserDefaults standardUserDefaults] objectForKey:A]

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];

[self.window makeKeyAndVisible];

//设置window的根控制器

[self setWindowRootVC];

return YES;

}

- (void)setWindowRootVC{

//判断之前是否启动过

if (kFetchMyDefault(@"isFirst") == nil) {

//如果没有启动过就给键isFirst赋值

kSaveMyDefault(@"isFirst", @1);

FirstLaunchViewController *firstLaunchVC = [[FirstLaunchViewController alloc]init];

self.window.rootViewController = firstLaunchVC;

}else {

self.window.rootViewController = [[UINavigationController alloc]initWithRootViewController:[[ViewController alloc]init]];

}

}

@end

你可能感兴趣的:(iOS--NSUserDefaults)