不讲解全局变量的原理。只是记录一下使用场景。
需要定义一个全局变量,供全局使用。比如版本更新的时候,需要存储本次从服务器获取的版本号,存储在本地,下次进来的时候讲服务器的版本号和本次的版本号作对比,然后实现版本更新。我这里说的不是ipa包的更新,因为ipa包的更新是可以动态获取到本地的版本号的,所以不用考虑这些。
我说的情况是在做一些资源包下载的时候,就需要在本地保存上一次资源包的版本号,然后进行对比。
默认本地第一次的是0,然后每一次获取新的版本就存进去(可以每次网络请求就存,也可以先判断有没有新版本再存)。然后就那这个存在本地的全局变量和网络获取的版本号作对比。
这里我用的NSUserDefault。
因为userDefault可以永久保存信息,并且每一次用相同的key存入不同的值,会被覆盖,当去用key去取值的时候,会取出最新存进去的值。所以刚好满足我的需求。
当然,还有很多方法可以进行这种操作。比如plist,归档,数据库等等。
有些人说单例可以实现,就是在单例里面创建一个变量,然后给变量赋值。我认为当程序被杀死之后,单例还是会被销毁,变量也会被销毁。所以我认为不适合这个场景。
单例适合用在整个生命周期内提供一个全局变量。
还有换肤功能,就是当我后台提示要有新的换肤功能之后,我就需要按要求去改变ui界面的颜色,所以我要在本地记录之前的ui颜色,然后做出相应的变化。要做到不同的用户在换肤的时候有不同的颜色,所以要和服务器返回的作对比。也是需要用到userDefalut。可以定义一个#define APP_SKIN_BACKGROUND_COLOR [[NSUserDefaults standardUserDefaults]stringForKey:@"appSkinBackGroundColor"]
需要修改皮肤颜色时
[[NSUserDefaults standardUserDefaults] setObject:RGB(100,100,100,1) forKey:@"appSkinBackGroundColor"];
[[NSUserDefaults standardUserDefaults] synchronize];
网友评论