define赋值 ios_define 不赋值 - CSDN
精华内容
参与话题
  • 记录一下: http://blog.csdn.net/yxiaoping/article/details/38847501?utm_source=tuicool&utm_medium=referral
    展开全文
  • iOS开发中,经常用到宏定义,或用const修饰一些数据类型,经常有开发者不知怎么正确使用,导致项目中乱用宏与const修饰 你能区分下面的吗?知道什么时候用吗? #define HSCoder @"汉斯哈哈哈" NSString *HSCoder =...

    在iOS开发中,经常用到宏定义,或用const修饰一些数据类型,经常有开发者不知怎么正确使用,导致项目中乱用宏与const修饰

    你能区分下面的吗?知道什么时候用吗?

    #define HSCoder @"汉斯哈哈哈"
    NSString *HSCoder = @"汉斯哈哈哈";
    extern NSString *HSCoder;
    extern const NSString *HSCoder;
    
    static const NSString *HSCoder = @"汉斯哈哈哈";
    
    const NSString *HSCoder = @"汉斯哈哈哈";
    NSString const *HSCoder = @"汉斯哈哈哈";
    NSString * const HSCoder = @"汉斯哈哈哈";
    

    当我们想全局共用一些数据时,可以用宏、变量、常量

    宏:

    
    #define HSCoder @"汉斯哈哈哈"
    
    

    变量:

    NSString *HSCoder = @"汉斯哈哈哈";
    

    常量:

    四种写法:
    static const NSString *HSCoder = @"汉斯哈哈哈";
    const NSString *HSCoder = @"汉斯哈哈哈";
    NSString const *HSCoder = @"汉斯哈哈哈";
    NSString * const HSCoder = @"汉斯哈哈哈";
    

    思考:宏与常/变量的选择?

    • 宏:只是在预处理器里进行文本替换,没有类型,不做任何类型检查,编译器可以对相同的字符串进行优化。只保存一份到 .rodata 段。甚至有相同后缀的字符串也可以优化,你可以用GCC 编译测试,"Hello world" 与 "world" 两个字符串,只存储前面一个。取的时候只需要给前面和中间的地址,如果是整形、浮点型会有多份拷贝,但这些数写在指令中。占的只是代码段而已,大量用宏会导致二进制文件变大
    • 变量:共享一块内存空间,就算项目中N处用到,也不会分配N块内存空间,可以被修改,在编译阶段会执行类型检查
    • 常量:共享一块内存空间,就算项目中N处用到,也不会分配N块内存空间,可以根据const修饰的位置设定能否修改,在编译阶段会执行类型检查

    尽量使用const,看苹果api使用常量多点,如下图:


    这里写图片描述

    常量区分

    全局常量:不管你定义在任何文件夹,外部都能访问

    const NSString *HSCoder = @"汉斯哈哈哈";
    

    例如:

    在ViewController定义一个 HSCoder 字符串全局常量:


    这里写图片描述

    在AppDelegate中访问:


    这里写图片描述

    局部常量:用static修饰后,不能提供外界访问

    static const NSString *HSCoder = @"汉斯哈哈哈";
    

    例如:

    在ViewController定义一个 HSCoder 字符串局部常量:


    这里写图片描述

    编译时报错:


    这里写图片描述

    const修饰位置不同,代表什么?

    1.const NSString *HSCoder = @"汉斯哈哈哈";
    2.NSString const *HSCoder = @"汉斯哈哈哈";
    3.NSString * const HSCoder = @"汉斯哈哈哈";
    
    1.const NSString *HSCoder = @"汉斯哈哈哈";
    "*HSCoder"不能被修改, "HSCoder"能被修改
    
    2.NSString const *HSCoder = @"汉斯哈哈哈";
    "*HSCoder"不能被修改, "HSCoder"能被修改
    
    3.NSString * const HSCoder = @"汉斯哈哈哈";
    "HSCoder"不能被修改,"*HSCoder"能被修改
    
    注意:1和2其实没什么区别
    

    结论:const右边的总不能被修改

    验证:

    const int *p;
    
    这里写图片描述
    int const *p;
    
    这里写图片描述
    int * const p;
    
    这里写图片描述

    所以一般我们定义一个常量又不想被修改应该这样:

    NSString * const HSCoder = @"汉斯哈哈哈";
    

    测试:

    在ViewController定义一个常量HSCoder:


    这里写图片描述

    在AppDelegate修改常量HSCoder,看下面报错提示:


    这里写图片描述

    一般项目中,定义全局常量,会写在独立文件里

    HSConst.m 定义常量:


    这里写图片描述

    HSConst.h 提供外接访问常量:


    这里写图片描述

    在AppDelegate中访问:





    链接:http://www.jianshu.com/p/f83335e036b5

    展开全文
  • #define Start_X 5.0f // 第一个按钮的X坐标 #define Start_Y 5.0f // 第一个按钮的Y坐标 #define Width_Space 5.0f // 2个按钮之间的横间距 #define Height_Space 5.0f // 竖间距 #define Button_Height 50.0f // ...
            
    #define Start_X 5.0f // 第一个按钮的X坐标
    #define Start_Y 5.0f // 第一个按钮的Y坐标
    #define Width_Space 5.0f // 2个按钮之间的横间距
    #define Height_Space 5.0f // 竖间距
    #define Button_Height 50.0f // 高
    #define Button_Width 175.0f // 宽
            
            for (int i=0; i<self.arrcount.count; i++) {
            
               
                
                    self.imgAo=[[UIImageView alloc]init];
                    self.imgAo.backgroundColor=
                [UIColor colorWithRed:((float)arc4random_uniform(256) / 255.0) green:((float)arc4random_uniform(256) / 255.0) blue:((float)arc4random_uniform(256) / 255.0) alpha:1.0];
                NSInteger index = i % 2;
                NSInteger page = i / 2;
                
                self->_imgAo.frame = CGRectMake(index * (Button_Width + Width_Space) + Start_X, page  * (Button_Height + Height_Space)+Start_Y, 30,30);
                self.imgAo.image=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[self.arrcount[i]objectForKey:@"linkLogoPrefix"]]]];
    
                [self->_bjView addSubview:self.imgAo];
                
                self.AS=[[UIButton alloc]init];
                self.AS.frame = CGRectMake(index * (Button_Width + Width_Space) + Start_X+40, page  * (Button_Height + Height_Space)+Start_Y, 100,30);
                [self.AS setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
                self.AS.tag=i;
                [self.AS setTitle:[self.arrcount[i]objectForKey:@"linkname"] forState:UIControlStateNormal];
                [self.AS addTarget:self action:@selector(mapBtnClick:) forControlEvents:UIControlEventTouchUpInside];
               
                self.AS.titleLabel.font=[UIFont systemFontOfSize:12];
               
                self.AS.backgroundColor=[UIColor yellowColor];
    
                [self->_bjView addSubview:self.AS];
    
                
              
            }
    
    
    
    //关于for循环出来的btn 今天跳转传值问题
    @property (nonatomic,strong)NSArray *arrMyData;
    
    self.arrMyData =json[@"data"];
    as.title= [[self.arrMyData objectAtIndex:btn.tag] objectForKey:@"linkname"];
    
    展开全文
  • IOS #define

    2012-12-20 11:32:55
    #define属于预处理命令,所谓预处理是指在进行编译之前所作的工作。预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理...
      #define属于预处理命令,所谓预处理是指在进行编译之前所作的工作。预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。
     
     它主要有3种作用
    
      
               1.定义常量,如#define PI 3.1415926。
      类似于const float PI = 3.1415926
      预编译的时候预编译器会将PI翻译为3.1415926
    
      
               2.简化输入,增加可读性
      #define max(a,b) (a > b ? a : b)
      之后就可以调用max(3,5),预处理之后等价于3 > 5 ? 3 : 5;它类有函数的优点,但节省了函数的开销。
    
      
               3.超越函数的功能
      #define forin(i,from,to) for(i=from,i<to,++i)
      这样调用:
      int index;
      forin(index,0,10){
        printf("%d",i);
      }
    展开全文
  • IOS #define和预编译指令

    千次阅读 2016-01-14 15:45:16
    预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理。 预处理指令是以#开头的代码行,#后是指令关键字,在关键字和#号之间允许存在任意个数的...
  • 在开发过程中,UE一般会给十六进制的颜色值,而如果RD同学每次都要...#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue...
  • 1、 static、const、extern、define (1)define—const—-苹果推荐使用const define也就是通常所说的宏,宏是在预编译时处理变量的替换,使用宏除了定义变量还定义一些函数。但是,宏不做编译检查,不报编译错误...
  • IOS 宏定义解决常见问题

    千次阅读 2013-06-24 15:10:57
    宏定义的一个很好的应用,解决一些常见问题,使程序更加健壮 //1、解决数组越界 //1) #define OBJECT_OF_ARRAY_ATINDEX(_OBJ_,_ARRAY_,_...#define OBJECT_OF_ATINDEX(_ARRAY_,_INDEX_) ((_ARRAY_)&&(_INDEX_>=0
  • 底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行。而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对宏的使用和依赖并不多。但是使用宏...
  • 059.Define 宏定义的嵌套

    千次阅读 2015-07-19 00:43:05
    ---------------  main.m  --------------- ...#define PI 3.1415926 #define TWO_PI PI * 2  // 嵌套定义新的宏 int main() {  NSLog(@"请输入圆的半径:");   double radius;  scanf("%lg
  • 这里介绍一下define、const、extern的用法、优劣以及要注意的地方。   1.define  宏define是定义一个变量,没有类型信息。define定义的常量在内存中有若干个拷贝。  define可以定义常量,但是建议不要这么做...
  • iOS学习:iOS代码规范

    千次阅读 2016-05-03 19:55:46
    iOS代码规范 Import规范 Define规范 Paragma Mark 规范 Interface规范 implementation规范 实例规范 NSDictionary规范 NSArray规范 函数规范 If-Else规范 For-In For 规范 Block规范 运算符规范 命名规范 实例命名...
  • C++工程中常用的宏定义(#define)

    万次阅读 2016-11-25 21:20:39
    尽管说define有很多不足之处,很多时候我们需要使用const来替代define, 也可以使用typedef来替代define。但是,在一些实际工程中,我们还是不可避免的使用到了define,这给我们带来了极大的方便。1 定义头文件,...
  • iOS开发中 常用枚举和常用的一些运算符(易错总结)
  • Swift iOS 函数说明

    2018-03-07 08:06:06
    # 函数## 4.1 函数的定义与调用函数是一个组织在一起的程序代码集合,用来完成某个特定的功能。为了提高代码的复用性,通常对代码进行抽取,将能够完成同一个任务的代码放置在一起,可作为一个函数使用。...
  • iOS-代码规范

    2016-08-08 17:57:21
    iOS-代码规范
  • ios第三方数据请求 UI_15

    千次阅读 2015-10-09 22:11:54
    使用第三方AFNetWorking,做网络请求,现在是一种主流的网络请求方式 如果导入的第三方文件不支持MRC工程环境,选中target-->Bulid phases -->complie sources 将对应的文件后加入 -fobjc-arc
  • iOS开发 - 数据懒加载

    千次阅读 2015-05-15 13:44:49
    -缓存概念做过JavaWeb开发的人都知道,在Web应用程序中,整个系统的性能在于它的响应速度,因为Web系统往往采用Oracle,MySQL等大型数据库,如果系统响应速度过慢,那么就会降低用户体验,从而影响系统的性能和价值...
  • iOS应用程序工程文件以及启动流程

    千次阅读 2019-08-12 17:40:04
    iOS程序启动流程 完整启动流程 UIApplicationMain方法 UIApplication AppDelegate代理生命周期回调 控制器View的加载 iOS工程常见文件 xxx-Infoplist文件 InfoPliststrings xxx-Prefixpch Defaultpng Iconpng iOS...
1 2 3 4 5 ... 20
收藏数 8,962
精华内容 3,584
关键字:

define赋值 ios