前言
昨天在优化一个项目中,我定义了一个宏因为宏定义的快捷和方便性,所以在开发日常的中我们时常会用到宏定义
我喜欢用到了大量的宏包括定义接口,尺寸,常用方法的替代。
用的时候是很爽歪歪,可是常在河边走哪有不湿鞋的道理。🤪
如图:我在定义一个kNewHeaderHeight的时候用到了加法运算
之后我是想得到一个控件的高度,通过屏幕的高度减去kNewHeaderHeight
mainScrollView.frame = CGRectMake(0,kNewHeaderHeight , kScreenWidth, kScreenHeight - kTabBarHeight - kNewHeaderHeight);
结果高度总是不对。。。。。
打印了一下各个值
NSLog(@"kTabBarHeight = %f",kTabBarHeight) ;
NSLog(@"kScreenHeight = %f",kScreenHeight ) ;
NSLog(@"kScreenHeight - kTabBarHeight - kNewHeaderHeight = %f",kScreenHeight - kTabBarHeight - kNewHeaderHeight) ;
结果的更加的诡异。。。。。可以看到这里我们单独打印每一个值的时候都没有问题,但是只要把他们放在一起去运算就会出现问题,相减的话理论上会得到的高度是577 但是结果却是669 。。。。!!!
真的是见了鬼了! !!
其实,宏定义实际上就是保存了一段代码(运算)当进行运算的时候宏就会原封不动的将代码放大算是中
例如上面的例子
kNewHeaderHeight = kHeaderHeight + 80 * kScreenWidth720
将kNewHeaderHeight放到减肥运算中就会出现问题其中的“ + ” 会变成 “ - ”
自然计算的结果就会不一样 kScreenHeight - kTabBarHeight - kHeaderHeight - 80 * kScreenWidth720
解决方法:
其实很简单,既然➕变成了➖ 那么我们只需要在定义kNewHeaderHeight加一个 ()就好了 自然➕就不会变了。。。。如图:这样计算的结果就不会变啦。。。。。。。。。
菜鸟果然是菜鸟,还是认真学习的好,加油⛽️