美文网首页iOSiOS相关iOS
iOS中关于宏定义与常量的使用

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

作者: 无神 | 来源:发表于2015-10-29 14:42 被阅读3856次

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

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

当时也想过替换成常量,但是当时的替换方法有问题,导致编译的时候有很多重复的变量,替换失败了,就不了了之,直到最近,每次编译的时间实在是超出了我的容忍极限,于是下定决心,一定要替换掉。又从网上查看帖子,从简书上看到了这篇文章【如何正确使用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 BKUSER_AGE_KEY         ;
 extern NSString *const BKUSER_TELPHONE_KEY    ;
 extern NSString *const BKUSER_ADDRESS_KEY     ;
 extern NSString *const BKUSER_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探讨!

相关文章

  • 关于extern引出的问题

    问题 项目中在.mm文件中使用宏: 报错: 解析 iOS的常量声明与定义 iOS中声明常量 定义常量 这个是iOS...

  • 一些小链接

    1、iOS 宏(define)与常量(const)的正确使用 iOS宏(define)与常量(const)的正确使...

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

    学习基础知识,看了两篇文章,记个笔记1、【如何正确使用const,static,extern】|那些人追的干货2、...

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

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

  • #define const static

    iOS 宏(define)与常量(const)的正确使用

  • iOS 宏定义与常量的使用

    学习基础知识,看了两篇文章,记个笔记1、【如何正确使用const,static,extern】|那些人追的干货[h...

  • C++中的内联函数

    1、常量与宏回顾 C++中的const常量可以替代宏常数定义,如: const int A = 3; <===>...

  • iOS const修饰常量的误区

    在iOS里,一般的常量建议大家能用const常量的,不要用宏定义。个中理由因为宏定义只是代码替换,而const常量...

  • iOS const修饰常量的误区

    在iOS里,一般的常量建议大家能用const常量的,不要用宏定义。个中理由因为宏定义只是代码替换,而const常量...

  • iOS 中的宏定义,常量,与枚举类型使用

    开发过程中的经常需要使用一些全局的常量,便于方法之间的参数传递和类型确定等,经常使用到的有宏定义,const常量以...

网友评论

  • LoveY34:UserInfoModelConstants.h里面的变量名跟UserInfoModelConstants.m的变量名还可以不一样啊?
    无神:@LoveY34 就是要一样的,我的可能写错了。
    LoveY34:@无神 可是我试了!不行唉!.h跟.m里面变量名不一样的话报错!换成一样的就不报错了!
    Undefined symbols for architecture x86_64:
    "_USER_AGE_KEY", referenced from:
    -[ViewController viewDidLoad] in ViewController.o
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    无神:@LoveY34 当然可以啊
  • 波多多:也可以用UIKIT_EXTERN替换掉extern ,苹果内部是这样干的
    无神:@波多多 这个看到过!我们只是内部开发使用extern,其实苹果的UIKIT_EXTERN,本质也是extern吧!只不过对外暴露出来的名字不一样!
  • 南方小金豆:UserInfoModelConstants.h UserInfoModelConstants.m跟普通创建文件一样嘛?一直不知道怎样的姿势来正确使用它?
    多LV信源:是一样的, "New File" --> "Source"下 "Cocoa Touch Class", “Class” 里 填写 常量文件名, “Subclass”里继承自 “UIView”或 “NSObject”, 在.h里删掉 @interface Constant : UIView及@end, 在 m里删掉 @Implementation Constant及 @EnD

    无神:@那份牵挂给了谁 里面就是一些常量的定义,和普通文件一样使用就可以!
  • UOnesHui:使用宏定义过多的话,随着工程越来越大,编译速度会越来越慢。 我不知道你这句话怎么得出来的 宏只不过是个预处理 你这里说编译变慢和宏有什么关系呢
    无神:@UOnesHui 好吧,我知道宏还有#if #else,你说我宏用的不好,那你说说如何更好的使用#define,#if #else能说说更好,向你学习!期待你的回复!
    UOnesHui:@无神 大哥 编译的预处理和编译时间完全没有关系 宏并不是只有#define 还有如 #if #else 与其说是占用了编译时间 不如说你的宏用得不好
    无神:@UOnesHui 虽然宏定义不占运行的时间,但是大量的宏替换会占用编译的时间,而且改用类型常量替换以后,编译时间确实缩短了很多!
  • Stony:引用的地方extern,定义的地方赋值,把定义集中在几个文件里,用头文件引入到引用的文件里。
    无神:@Stony 你说的是多个文件共享常量的情况,对于单独的文件,还是直接使用static修复比较方便!
  • 渴wang:我也想写日记,但是代码怎么添加呢,可以私信我么
    无神:@渴wang 我现在也只是初写,很多特殊效果不会用,但是可以提供一片教程http://wowubuntu.com/markdown/
  • 十一岁的加重:看来,我也得换了
    无神:@十一岁的加重 替换以后,编译速度提升很快的,你可以试试!

本文标题:iOS中关于宏定义与常量的使用

本文链接:https://www.haomeiwen.com/subject/kwffhttx.html