您好,登录后才能下订单哦!
这篇文章主要为大家展示了“iOS开发中关键字const/static/extern、UIKIT_EXTERN的区别有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS开发中关键字const/static/extern、UIKIT_EXTERN的区别有哪些”这篇文章吧。
关键字const/static/extern/UIKIT_EXTERN的释义和用法
1、const
这个单词翻译成中文是“常量”的意思。在程序中我们知道“常量”的值是不能变的,固定的。所以const关键字的作用就呼之欲出了:
(1)const用来修饰右边的基本变量或指针变量
(2)被修饰的变量只读,不能被修改
下面举个最简单的例子:
//声明一个int类型的变量a,变量初始化值为10,并且变量a左边有一个const关键字修饰 int const a = 10; //因为变量a被const修饰,就成为了只读,不能被修改赋值了,所以下面这行代码是错误的 a = 20;//错误代码 const int a = 10; =======等价于======== int const a = 10;
下面再看一组练习,这组练习完成后,相信你就完全理解const的用法:
分别指出下面四行代码中 *p 和p是只读还是变量
int const *p // *p只读 ;p变量 int * const p // *p变量 ; p只读 const int * const p //p和*p都只读 int const * const p //p和*p都只读
const的常用用法:
//定义一个全局只读变量 NSString * const Kname = @"appkey"; //static修饰后此全局变量只能本文件访问 static NSString *const Key = @"hddjj”;
2、static
这个单词翻译成中文是“静态”的意思。关从字面上理解还真没法跟他的作用关联起来,下面我们直接先看他的作用:
(1)修饰局部变量
保证局部变量永远只初始化一次,在程序的运行过程中永远只有一份内存, 生命周期类似全局变量了,但是作用域不变。这句话怎么理解呢?还是以代码例子来讲解吧。
随便建一个工程,在一个控制器类上监听控制器view的点击事件方法:
点击事件
输出日志如下:
输出日志
从输出日志中我们可以看到i一直等于1,这也是预料之中的,因为每次点击进入这个方法就会重新初始化一个全新的变量i= 0,加加了一次后值变为1,然后打印出结果为1,出了这个方法后局部变量i就被释放回收。所以每次打印出来的结果都为1。
但是我们再看看局部变量i被关键字static修饰后的情况:
点击事件
输出日志如下:
输出日志
上面日志中可以看到i的值一直在自增。什么,它不是每次进去都被初始化赋值为0了么,怎么能累加呢。这就是关键字static修饰的局部变量的作用,让局部变量永远只初始化一次,一份内存,生命周期已经跟全局变量类似了,只是作用域不变。
(2)修饰全局变量
使全局变量的作用域仅限于当前文件内部,即当前文件内部才能访问该全局变量。
iOS中在一个文件声明的全局变量,工程的其他文件也是能访问的,但是我又不想让其他文件访问,这时就可以用static修饰它了,比较典型的是使用GCD一次性函数创建的单例,全局变量基本上都会用static修饰。
下面是一个GCD一次函数创建的单例
单例
(3)修饰函数
static修饰函数时,被修饰的函数被称为静态函数,使得外部文件无法访问这个函数,仅本文件可以访问。这个在oc语言开发中几乎很少用,c语言倒是能看到一些影子,所以不详细探讨。
3、extern
这个单词翻译过来是“外面的、外部的”。顾名思义,它的作用是声明外部全局变量。这里需要特别注意extern只能声明,不能用于实现,而且定义和分配内存都在原来类中。
定义
声明
输出日志
4、UIKIT_EXTERN
如果多个.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
以上是“iOS开发中关键字const/static/extern、UIKIT_EXTERN的区别有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。