iOS中关于宏定义与常量的使用

现在在做的这个产品,由于需求不断的添加,工程越来越大,编译速度是越来越慢。之前就看过帖子:

使用宏定义过多的话,随着工程越来越大,编译速度会越来越慢。

当时也想过替换成常量,但是当时的替换方法有问题,导致编译的时候有很多重复的变量,替换失败了,就不了了之,直到最近,每次编译的时间实在是超出了我的容忍极限,于是下定决心,一定要替换掉。又从网上查看帖子,从简书上看到了这篇文章【如何正确使用const,static,extern】|那些人追的干货,仔细阅读,研究,询问博主之后,终于尘埃落定,替换了之前使用宏定义的常量。

现在献上一段代码:

static CGFloat const kLogoImageWidth = 100; //logo宽度
static CGFloat const kLogoImageHeight = 100; //logo宽度
static CGFloat const kLogoImageY = 110;
static CGFloat const kBtnHeight = 40;
static CGFloat const kPadding = 30;
static CGFloat const kWeixinTopPadding = 15;
static CGFloat const kWeiboLoginBottom = 230;
#define kScaleSpace(designSpace) ((designSpace)*(SCREEN_HEIGHT/667.0)) //根据iphone6 的设计稿计算缩放高度

替换的时候一定要注意数据类型。对于 CGFloat 和 NSString类型替换的时候也是一样的。代码如下:

static CGFloat const kBottomHeight = 50.0; //底部视图高度
static NSString   *const CELL_TITLE_KEY = @"CELL_TITLE_KEY";
static NSString   *const CELL_CONTENT_KEY = @"CELL_CONTENT_KEY";

替换完成之后代码的编译速度确实上去了,现在编译快了。希望对正在为编译速度慢感到困惑的您有所帮助!

补充说明:以上的类型常量替换宏的情况,只是适用于单个文件的情况。如果是多个文件共享的常量,苹果推荐的这样的方式:

  • UserInfoModelConstants.h
 extern NSString *const USER_AGE_KEY         ;
 extern NSString *const USER_TELPHONE_KEY    ;
 extern NSString *const USER_ADDRESS_KEY     ;
 extern NSString *const USER_BRIEF_KEY       ;
  • UserInfoModelConstants.m
 NSString *const BKUSER_AGE_KEY         =     @"XXXXX.userAge";
 NSString *const BKUSER_TELPHONE_KEY    =     @"XXXXX.telphoneNO";
 NSString *const BKUSER_ADDRESS_KEY     =     @"XXXXX.address"; 
 NSString *const BKUSER_BRIEF_KEY       =     @"XXXXX.brief";

在需要使用共享常量的文件中引入UserInfoModelConstants.h即可。如果还有什么不足的地方希望大家指出。

以上只是我在阅读别的帖子之后的一点体验和总结,如果有疑问欢迎微博@蓝光95_176探讨!

    原文作者:蓝光95
    原文地址: https://segmentfault.com/a/1190000010101256
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞