美文网首页i日久生。。。iOS开发iOS Developer
OC中全局变量,静态变量以及常量的使用

OC中全局变量,静态变量以及常量的使用

作者: 远方的枫叶 | 来源:发表于2016-08-15 01:11 被阅读2254次

全局变量

  • 凡是定义在函数外部以及除其他代码块(如if等)的变量都是全局变量;
  • 全局变量包括不带有static的外部全局变量和带关键字static的内部全局变量;
  • 其生命周期存在于整个程序的生命周期中,它会被存储在全局数据区(有些书上也叫静态数据区);
  • 一个全局变量在整个程序中是唯一的,所以命名上一般要带有前缀防止同名出现如下面的错误,其他文件如果想引用该全局变量需要用关键字extern进行额外的声明
    使用不当可能会出现如下报错:
duplicate symbol _a in:
    /Users/sunlei/Library/Developer/Xcode/DerivedData/testSL-foqxegbhpqzqcnavmaglgvnzbggp/Build/Intermediates/testSL.build/Debug-iphonesimulator/testSL.build/Objects-normal/x86_64/ViewController.o
    /Users/sunlei/Library/Developer/Xcode/DerivedData/testSL-foqxegbhpqzqcnavmaglgvnzbggp/Build/Intermediates/testSL.build/Debug-iphonesimulator/testSL.build/Objects-normal/x86_64/aaa.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

注意:一般外部全局变量都要定义在.m文件中,因为如果在.h定义的话,一旦该文件被其他文件引用的话就还会报上面的符号重复的错误,对于把static内部全局变量定义在头文件不会报上面的错,但是一般推荐定义在实现文件中;

静态变量

  • 静态变量分为全局静态变量和局部静态变量,但是不论是局部的还是全局的静态变量,它的生命周期也是存在于整个程序中的,它会被存储在全局数据区(有些书上也叫静态数据区),只会被初始化一次;
  • 静态变量的作用域仅限于一个编译单元之内(一个编译单元会生成一个.o目标文件,大家应该都知道一个源文件会被编译器编译成目标文件,所以也可以说静态变量的作用域仅限于它所定义的实现文件中),如果想在其他文件中访问该变量,我们可以在定义它的文件中实现一个接口方法,通过这个方法来间接访问它;

常量

  • 用const 修饰的变量,它的值是在定义的时候就确定的,不可修改的;
  • 对于在编程方面上,很多砖家都建议多用常量值代替#define预编译指令,原因是我们看不见所定义的宏的类型,取而代之的const常量会更好,其实最好的是在前面加一个static限制一下作用域;
    最常用的案例,是我们定义一个通知的名字:
//在.h头文件中用关键字extern进行声明
//这样引用该类头文件的其他文件就可以直接使用名字了,而不必在乎它的值是多少,一般可以将其定义的公共头文件中去
extern NSString *const SLTest;
//在.m中进行实现赋值
NSString *const SLTest = @"SLTest";

相关文章

  • 成员变量 全局变量 局部变量 属性 常量

    成员变量 全局变量 局部变量 属性 常量 常量:oc中声明常量使用关键字const。如:const double ...

  • OC中全局变量,静态变量以及常量的使用

    全局变量 凡是定义在函数外部以及除其他代码块(如if等)的变量都是全局变量; 全局变量包括不带有static的外部...

  • 2019-07-17

    今天看了常量的使用,全局变量,以及函数中的变量

  • 存储类型和一些关键字

    参考:C Storage ClassesiOS定义静态变量、静态常量、全局变量iOS开发——OC篇&常用关键字的使...

  • iOS 单例线程安全问题

    OC 中不允许编译时初始化变量, 静态变量和全局变量, 只能赋值常量, 所以只能通过 dispatch_once_...

  • [C/C++]C语言中字符串常量存储在哪里

    常量存储总结 局部变量、静态局部变量、全局变量、全局静态变量、字符串常量以及动态申请的内存区 1、局部变量存储在栈...

  • OC基础知识

    OC中内存分为五大区域 栈:存储局部变量和指针堆:创建对象BSS:存储未初始化的全局变量和静态变量数据段(常量区)...

  • 变量的略知

    变量:全局变量、静态变量、局部变量、字符串常量、动态分配、静态分配 ---------------------根据...

  • 基础:iOS 中static和extren的使用

    前言 我们在日常开发中经常会用到常量定义、静态变量、静态全局变量的使用,这时就会使用到static、extern和...

  • c++ 内存四区

    代码区:存放函数体的二进制代码,由操作系统进行管理全局区:存放全局变量和静态变量,以及常量(字符串常量以及其他常量...

网友评论

    本文标题:OC中全局变量,静态变量以及常量的使用

    本文链接:https://www.haomeiwen.com/subject/ndqusttx.html