iOS预编译文件设置以及常用宏记录
创建一个iOS工程的时候,为了方便,我们一般会设置大量的宏,宏我们一般会写在一个.pch文件中,然后我们需要将.pch文件的路径在工程中设置一下,以达到预编译的作用
方法一:
在Finder中找到pch文件后,直接拖到这里:Build Settings ->Apple LLVM7.0 - Language -> Prefix Header。这样设置的话,就将pch文件的位置固定了,如果将工程换个位置,就找不到pch文件了
方法二:
在Finder中找到pch文件后,直接拖到这里,别停下,还没有结束,将前面的内容删除,只留下pch名字,还有上一层的名字,然后在最前面加上$(SRCROOT),然后就结束了
例子:$(SRCROOT)/ruanjian/PrefixHeader.pch
这样的好处就是,不管你把工程移动到哪里,都可以找到pch文件
下面是一些工程中常用的宏整理:
1.屏幕宽度 #define SPScreen_W [UIScreen mainScreen].bounds.size.width
2.屏幕高度 #define SPScreen_H [UIScreen mainScreen].bounds.size.height
3.导航栏高度 #define TOP_H (SPScreen_H == 812.0?44.0f:20.0f)
4.颜色RGB #define SPRGBColor(R,G,B,A) [UIColor colorWithRed:R/255.0 green:G/255.0 blue:B/255.0 alpha:A]
5.控件位置 #define SPFrame(X,Y,W,H) CGRectMake(X,Y,W,H)
6.参照元素底部位置 #define SPGetMaxY(view) CGRectMaxY(view.frame)
7.参照元素宽度位置 #define SPGetMaxX(view.frame)
8.参照元素宽 #define SPGetWidth(view) view.frame.size.width
9.参照元素高 #define SPGetHeight(view) view.frame.size.height
10.点位置 #define SPPoint(X,y) CGPointMake(X,Y)
11.AppDelegate单例 #define SPAppDelegate ((AppDelegate*)[UIApplication sharedApplication].delegate)
12.NSUserDefaults存储数据 #define SPSetDefaults(value,key) [[NSUserDefaults standardUserDefaults] setObject:value forKey:key]
13.NSUserDefaults读取数据 #define SPReadDefaults(key) [[NSUserDefaults standardUserDefaults] objectForKey:key]
14.沙盒地址 #define SPDefaultPath NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDOmainMask,YES)[0]
15.block弱引用 #define SPSelf __weak typeof(self) weakSelf = self
16.字体大小设置 #define SPFont(n) [UIFont systemFontOfSize:n]
项目中用户数据本地化处理方案
项目中我们经常会对用户的一些属性进行本地话处理,比如:用户的账号密码,登陆有效期限等等,程序启动的时候首先需要对这些属性进行处理从本地将这些数据读取到程序的用户类当中,然后根据用户类中的属性的值进行下一步处理
首先我们需要新建一个用户类:比如User类,在user中定义自己需要的属性,比如:
由于user类肯定是一个全程序都需要用到的类,所以将user类设定成一个单例,单例的好处就是,在程序的全局中我们都可以调用他的方法和修改它的属性,牵一发而动全身。
由于用户的属性一般会保存在本地,用户后续持续打开程序的时候不必要进行繁琐的登陆操作,所以用户类创建的时候我们需要讲本地的数据读取进用户的属性中,然后才可以根据用户的属性进行判断,程序才能继续走下去,用户的属性一般很多很杂,有时候还需要持续的更新,添加,所以我们需要用一种方法来对用户属性进行初始化,最好是能自动读取用户的属性名称,然后根据用户属性名称自行去本地查找赋值,这样可以避免我们在对类的属性进行更新修改添加的时候需要修改初始化程序,方便,不容易出错。这时候就需要用到runtime自动在初始化的时候进行类属性名称的读取。
这边的SPReadDefault(property)是一个宏,封装的是[[NSUserDefaults standardUserDefaults] objectForKey:key]是NSUserDefaults类的一个方法用来读取存储在本地的键值对数据,和它对应的还有一个方法是用来存储键值对数据的,[[NSUserDefaults standardUserDefaults] setObject value forKey:key],由于程序的用户属性并不多且关系也不复杂,所以这里选用NSUserDefaults类来存储用户属性,否则可以选用新建一个数据库来存储复杂的用户属性。
初始化完成后,我们需要根据我们需要用到的功能来编辑相应的方法,一般有2个方法是必须的,一个是保存类的属性值到本地,一个是讲本地的数据清除
方法1:保存类的属性值到本地
方法2:本地的数据清除