在判断软件是否第一次登录时如何让BOOL看上去更有可读性

原创 2015年11月20日 00:56:28

今天在为一个app做软件引导页需要判断用户是否进入app时遇到的一些关于BOOL的问题,在这里发表一下我的见解:

如何判断app是否第一次登录(大概思路)

判断用户是否第一次登录app,通常的做法是用一个BOOL来记录用户“登录“的这一个行为,所以话在AppDelegate中会设定一个BOOL值(此处叫isFirstLaunch),让isFirstLaunch一开始为YES,当用户进入app并展示完引导页后,isFirstLaunch设置为NO,并把isFirstLaunch存储到UserDefault中。当用户下次进入app时,isFirstLaunch为NO,那么就不会加载引导页。从而通过这个BOOL来判断是否第一次登录。因为这个BOOL,所以问题来了。

BOOL那点事

此处先要普及一下,Objective-C的BOOL值默认为NO,这里就有点耐人寻味了,整篇文章其实就是因为这个原因而展开的。
在网上查阅了挺多关于iOS如何判断app第一次启动的代码,此处举例一个(作者就不列了):

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"firstStart"]){
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"firstStart"];
        NSLog(@"第一次启动");
    }else{
        NSLog(@"不是第一次启动");
    }

可以看到,这份代码作者一开始先通过[[NSUserDefaults standardUserDefaults] boolForKey:@”firstStart”](因为并没有进行赋值,所以默认为NO)取反来判断用户第一次启动app,然后在将其设为YES,下次进入的时候就会跑else块的代码了。

相信都看出来了吧,逻辑没错,但是可读性缺并不好。都是这个BOOL的锅,默认为YES不就好了?

如何让BOOL更有可读性?

当时涌进脑海的第一个想法是用一个enum来存储两个值 isFirstLaunch,isDefaultLaunch,然后通过枚举转nsnumber来做启动判断,但是后来发现这样会写的很臃肿而且后面要用到这个判断的api调用时也会很麻烦,所以放弃了这个想法(是我想太多)。BOOL的简单有时真的不能被其他东西代替。
于是再想了一下,写了一个即简单又有可读性的code:

    _isFirstLaunch = ![[NSUserDefaults standardUserDefaults] objectForKey:@"AppIsDefaultLaunch"];

    if (_isFirstLaunch) {
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"AppIsDefaultLaunch"];
    }else {
        NSLog(@"default launch");
    }

这样看上去会让人更加容易理解,虽然不涉及什么算法和优化,但是可读性真的提升了不少(自我安慰)。

看法到这里就讲的差不多了,纯粹分享和记录下来。如果有大牛看到并且有更好的想法跪求快快告知,求知的欲望是强烈的,前路是漫长的,加油!

版权声明:本文为博主原创文章,未经博主允许不得转载。

NSUserDefaults 读取Bool值引起的错误

[UserDefaults setBool:isbool forKey:@"key"]; 要使用 boolForKey: 的方法才能得到正确的BOOL类型, 用objectForKey...
  • playddt
  • playddt
  • 2015年08月20日 12:28
  • 1337

ios中NSUserDefaults的使用

创建一个user defaults方法有多个,最简单得快速创建方法: NSUserDefaults *accountDefaults = [NSUserDefaults standard...
  • svrsimon
  • svrsimon
  • 2013年01月12日 13:30
  • 2392

iphone之NSUserDefaults

概述 该NSUserDefaults 类提供了一个默认的系统编程接口进行交互。  在默认系统允许应用程序来定制其行为,以符合使用者的偏好。  例如,您可以允许用户确定测量你的应用程序显示文件或如...
  • yaokang522
  • yaokang522
  • 2012年01月19日 14:21
  • 3092

Objective-C 中的BOOL

在objc.h 中,BOOL 定义为:typedef signed char BOOL; #define YES (BOOL) 1 #define NO (BOOL) 0从上面...
  • iukey
  • iukey
  • 2012年03月10日 16:08
  • 19251

NSUserDefaults standardUserDefaults使用注意事项

NSUserDefaults standardUserDefaults使用注意事项
  • Dwarven
  • Dwarven
  • 2014年04月16日 14:56
  • 7733

IOS-------------NSUserDefaults standardUserDefaults的使用

本地存储数据简单的说有三种方式:数据库、NSUserDefaults和文件。 NSUserDefaults用于存储数据量小的数据,例如用户配置。并不是所有的东西都能往里放的,只支持:NSStri...
  • bingxx11
  • bingxx11
  • 2013年07月31日 11:36
  • 2833

Android判断是否首次登录

SharedPreferences setting; final String INITIALIZED = "initialized"; Boolean user_first;
  • cicilover
  • cicilover
  • 2014年07月03日 10:41
  • 881

android 如何判断软件是否第一次运行?

android 如何判断软件是否第一次运行?   2013-06-20 10:22:59|  分类: Android(Java)入|举报|字号 订阅 Share...
  • anlun
  • anlun
  • 2014年11月15日 12:39
  • 552

NSUserDefaults详细解释

NSUserDefaults是一个 它的方便之处在于不用申明太多的变量来存储不同的数据,一个NSUserDefaults就搞定了。 它是应用程序域的,能让我们进行更加方便的使用!使用真心的...
  • leikezhu1981
  • leikezhu1981
  • 2015年04月03日 13:52
  • 2679

IOS 文件目录及NSUserDefaults浅谈

1.IOS文件目录 iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app...
  • crycheng
  • crycheng
  • 2014年03月27日 14:15
  • 9920
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在判断软件是否第一次登录时如何让BOOL看上去更有可读性
举报原因:
原因补充:

(最多只允许输入30个字)