Loading... ## 什么是全局变量 > 在程序设计中,全局变量是在所有作用域都可访问的变量,与之对应的是局部变量。 > ----[WIKI](https://zh.wikipedia.org/wiki/%E5%85%A8%E5%B1%80%E5%8F%98%E9%87%8F) 我们可以从不同的角度来看待全局变量: 1. 从编程的角度来说,这是一个记录内容全局可"读写"的变量 2. 从编译和链接的角度来说,这是一个需要解析的符号表 3. 从内部来说,他是具有特殊意义的内存 4. 从语法语义上看使用Extern之后,他是暴露在文件或者模块外部的变量,给了其他类或者函数来查看和修改模块内部属性的机会。 5. 从生存周期上看,他贯穿整个程序运行期间。 6. .... 无论从我们用那种角度来看全局变量,都无可否认我们在实际编程中都在大规模使用这这种形式的变量。以击穿文件和模块的封装,向外暴漏修改文件或者模块内部的能力。而且在面向对象的编程方式下,我们更是以单例这种特殊的模式,来向外提供能力更加丰富的全局变量。不能有可读写的属性,而且还能执行某些操作。 然而,我们却非常遗憾的发现,全局变量和他的变种形式,其实是对我们一直信奉的"封装",这个编程的基本原则的破坏。通过全局变量我们暴漏了过多的信息给外部模块,让原先模块的封装性变得弱。而之后会像引发了蝴蝶效应一样,在整个APP的代码维护上和运行时产生影响。 使用全局变量,当然有必须是它才能够完成的任务,然而它在完成功能的时候,也产生了一些副作用。于是,我们必然会思考:是够该使用全局变量。 ## 我们是否该使用全局变量 ## 全局变量的变种 ### 单例 ### 被strong之后在实例之间传来传去的变量 ### 函数内部的static变量 ## 使用全局变量的时候,请慎重,慎之又慎 1. 该对象是否是真的需要在整个程序的生命周期内,常驻内存。 2. 如果该对象所对应的业务存在重入的情况,你能确保,第二次使用该对象的时候,该对象是一个干净的对象?如果不能,那请考虑使用其他的编程方式。 最后修改:2020 年 11 月 17 日 11 : 10 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 ×Close 赞赏作者 扫一扫支付 支付宝支付 微信支付