iOS 开发中const,宏,static,exteren的一些

2017-11-14  本文已影响25人  时光机728

开门见山,直入主题!

一:const

  iOS 开发中 经常会用到 const 关键字,那么我们应该怎么理解它呢?
const可以用来修饰基本数据类型(int),指针(*p),OC对象(NSString)等,被const修饰的变量只会编译一次,且被修饰的变量不能被再次修改,否则会报错!

举个栗子说明一下:

1.修饰变量

    const int a = 10;
    a = 1;

    int const a = 10;
    a = 1;

两种写法是一样的效果,此时const都是来修饰变量a的;此时Xcode会这样报错

AC507A98-28FC-44D9-ABC9-54CFC0DD5E88.png
2.修饰指针
    int * const a = 10;
    int *b = 20;//定义一个int型指针b,指向 20 ;
    //此时 *a 访问到的变量的值不可变; eg:
    a = b;

此时Xcode会报错如下:

5303D457-0087-4123-9162-BF8E02D01AD1.png
因为此时const修饰指针a,所以a就不能被修改,此时*a是可以被修改的,可以自己试一下,加深一下印象.
int const *a = 10;
    //此时 *a 访问到的变量的值不可变; eg:
    *a = 20;

此时Xcode会报错如下:

D499D376-4B14-4E7B-8A96-DD6E121A0FED.png
此时const修饰是指针所指变量,此时指针a其实可以修改的.

3.修饰OC对象

    NSString *const name = @"xql";
    name = @"new";

此时Xcode会报错如下:

D46286EB-2DAF-4B36-9865-0CD518DA6A1E.png
此时name是不可修改的,苹果官方代码中也能经常看到这样的用法,声明一个只读变量:
125D4F14-EA8A-4509-9D29-66D825FFE7EA.png

二:宏

说到const,经常拿来和对比,那么它们有什么区别呢:

三:static和extern

接下来对比着看一下staticextern

static

static可以修饰局部变量,也可以修饰全局变量

     -(void)count{
    
         static int i = 0;
         i++;
     }

多次调用-count方法,不用static修饰时,i 会在count方法结束时销毁从而起不到计数作用,用static修饰后i会一直存在直到杀死程序,此时i就能起到计数作用;因为被static修饰的变量会在程序启动时就分配空间(不是等到执行方法时才分配,可自己动手敲代码试试),以后程序运行的整个周期内就不会再分配空间了

extern

 extern是用来声明全局变量的,只是声明,而不能定义变量,即不能给声明的变量赋值;当在a文件内声明一个全局变量 int a = 3;(默认是带有extern修饰符的);在没有引用a文件的b文件内,只要用 extern再次声明一下(extern int a;)就可访问a文件内部的变量a;且与 a文件 和 b文件 的加载顺序无关.

上一篇 下一篇

猜你喜欢

热点阅读