• const经典面试题


       1> const int age1 = 21;

         age1 = 100; // 编译报错

      2> int const age2 = 22;

      3> const int *age3 = 23;

         int val1 = 101;

        *age3 = val1; // 编译报错

         age3 = &val1; // 编译通过

      4> int const *age4 = 24;

      5> int * const age5 = 25;

         int val2 = 102;

         age5 = &val2; // 编译报错

         *age5 = val2; // 编译通过

    解释:  

      1> const放在最前面可以往后移一位,含义不变,int const age1 = 21, const修饰age1,意味着age1不可修改

      2> 同1

      3> 和1一样,往后移一位,含义不变,int const *age3 = 23, const修饰 *age3,

        首先age3是一个指针变量, *age3是取得指针所指向的变量, const修饰*age3, 意味着 *age3是取得指针所指向的变量 不可修改

      4> 同3

      5> age5是指针变量, const修饰指针变量,意味着 这个指针变量 不可修改,而指针变量存的是地址,意思就是不能把 这个指针变量存的地址 改成 其他地址.或者说不能改变指针的指向.

    2. 项目中,经常有一些固定的值,可能会被多个地方使用,这个时候可以考虑用const

      比如下面这样:

        NSString * const myURL = @"http://xxx.xxx.xxx.xxx:8090";

      其实也可以用宏,比如下面这样:

        #define myURL @"http://xxx.xxx.xxx.xxx:8090"

      但是用const比宏效率更高,比如下面这种打印多次,如果用宏,本质上是在编译时做替换,会占用3份内存,如果用const则不会浪费内存,始终是1份内存

        NSLog(@"远程连接的地址是 %@",myURL);

        NSLog(@"远程连接的地址是 %@",myURL);

        NSLog(@"远程连接的地址是 %@",myURL);

    3. 使用const必须注意的地方

      如果多个.m文件需要用到myURL,可以在每一个.m文件都像下面这样初始化吗?

        NSString * const myURL = @"http://xxx.xxx.xxx.xxx:8090";

      肯定不行,编译时,会报重复定义.比如在pch文件中写上面这行代码,就相当于为每一个.m文件都写这行代码

      要解决重复定义的问题,可以参照苹果的做法,比如系统预置的通知 

        UIKIT_EXTERN NSString *const UIKeyboardWillShowNotification;

        UIKIT_EXTERN NSString *const UIKeyboardDidShowNotification; 

        UIKIT_EXTERN NSString *const UIKeyboardWillHideNotification; 

        UIKIT_EXTERN NSString *const UIKeyboardDidHideNotification;  // UIKIT_EXTERN,是经过处理的extern

        

      (PS:其实也可以用static修饰全局变量,表明该全局变量只对当前文件可见,但是不建议这么做,每个.m文件都这么做,比较浪费内存)

      具体解决方法:

          1>自定义类MYConst,继承自NSObject

          2>在MYConst.m文件中

            #import <Foundation/Foundation.h>

            NSString * const myURL = @"http://xxx.xxx.xxx.xxx:8090";

          3>在MYConst.h文件中

            #import <Foundation/Foundation.h>

            extern NSString * const myURL; // extern,外部的意思,表明这个全局变量,不是自己的,是别人的,请在其他文件里找这个全局变量

          4> 在pch文件中 #import "MYConst.h",这样项目里每一个.m文件都有 extern NSString * const myURL;

         

  • 相关阅读:
    第八周上机作业
    第七次作业
    第七周上机
    第六周作业
    4.9上机作业
    第五周作业
    第四周作业
    第二次上机作业
    第三周作业
    第九周上机练习
  • 原文地址:https://www.cnblogs.com/zsw-1993/p/4879074.html
Copyright © 2020-2023  润新知