番外篇
const、static与extern
上面大量讲了const和define这两个关键字的作用与区别,分析有些片面。
比如const在修饰一个变量如NSString字符串的时候,是将这个字符串放在栈区,随应用声明周期,因为常量是放在栈区由系统直接分配管理的。
之所以为什么要考虑一个变量的内存问题呢?其实程序员每天在做的工作不仅仅是完成一个代码的编写,更多的是在做一个整体的把控。如何从一个思想到一个能够为人服务的手机软件?
这期间经历的什么其实需要我们考量的。这个些问题我会在一片文章中详谈!我觉得作为一个智者,应该搞清楚自己知道什么不知道什么,才利于前行!
const
const 在修饰一份变量的时候,一最简单的理解方式就是,老师拿了一个动物大象模型,给同学讲故事,这个动物的模型将在整个故事过程中充当学生脑海里整个听故事过程中的这个大象,而大象只有一个,在过程中它是不可能被替换的,因为它真实存在,而大象经历了什么,又代表什么是任务设定的,这个是可以定义的;而这个大象它代表了什么将会在这个古故事结束之后,任由他去了。也许他仅仅是个模型,但是,只要在这个故事当中,他就是不可代替的!
所以,一个常量的生命周期就如同显示存在的一个事物,不可被替代的事物,独一无二的事物(如太阳,月亮和星星)也正对应了----常这个字!
不知道说道这里,和我一样经历的你有没有明白些什么!
它随时被申请在内存空间,但永远只有一份!也正是为什么一个程序中,声明两个相同的const常量,会出现上面报错的原因!
static
举一反三,我们可以从字面理解,“静”这个字的含义,之所以是静态,专业术语分析是因为,专门用来修饰局部变量,(因为局部变量是在函数结束的时候就会消失掉),将局部变量的生命周期变为和全局变量的生命周期一样,在程序结束的时候消失!
#专业总结
* 修饰局部变量
* 让局部变量只初始化一次
* 局部变量在程序中只有一份内存
* 并不会改变局部变量的作用域,仅仅是改变了局部变量的生命周期(只到程序结束,这个局
部变量才会销毁)
* 修饰全局变量
* 全局变量的作用域仅限于当前文件
extern
更容易理解在这里不再复述 |