OC中的extern,static,const

2024-06-17 02:58
文章标签 oc extern static const

本文主要是介绍OC中的extern,static,const,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OC中的extern,static,const

**const的作用**

const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p)。

被const修饰的变量是只读的。

**static的作用:**

修饰局部变量:1.延长局部变量的生命周期,程序结束才会销毁。

2.局部变量只会生成一份内存,只会初始化一次。

3.改变局部变量的作用域。

修饰全局变量 1.只能在本文件中访问,修改全局变量的作用域,生命周期不会改

2.避免重复定义全局变量

3..pch生成的全局变量是每个文件一份,所以修改所在文件的全局变量并不能跨文件修改

**extern的作用**

只是用来获取全局变量(包括全局静态变量)的值,不能用于定义变量

extern工作原理:先在当前文件查找有没有全局变量,没有找到,才会去其他文件查找。

重点

.h中

#import<UIKit/UIKit.h>

NSString* const myTest;.

m中

#import<UIKit/UIKit.h>

NSString * const myTest = @".m";

如果不在.h中加extern,去引用.h中的变量时,因为.h和.m同时声明一个变量时,虽然写的时候不报错,但是在代码编译的时候会报错(这也说明.m文件不管有没有引用都会编译并链接),

错误如下: 1 duplicate symbol for architecture x86_64所以extern是必要的,表明.h中的全局变量引用自其他文件,我们要在.h中加上extern.h中  

#import<UIKit/UIKit.h>  

extern NSString* const myTest;

这篇关于OC中的extern,static,const的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1068295

相关文章

OC 中的*前const与*后const

int const *p2; int *const p3; 这个什么不能改由const后面的内容决定,如果是*p的话,则*p不可以改。 也就是说p指向的内容不能改变 如果const后面是p的话,则p不能改,也就是说p的指向不可以改变 OC中的字符串的话 NSString* name=@"wangning"; 此时我们不想让外界改变name的值得话const应该加在 NS

OC和 C语言中的const

const与宏对比 1.都是在其他的地方不可以改变 2.一个地方改了其他的地方都会改变。 而且宏定义的缺陷是, 是它会不断的开辟临时变量的存储空间 使用const的话 是都去使用同一的一份空间,使用同一个对象。 加const 之后变量还是全局的,只不过变为全局常量。 如果此时改变量不想被被类外面访问的话,可以加上static关键字, 3.下次想要定义一些宏的时候分

OC 中的深拷贝和浅拷贝

1.指针地址拷贝,浅拷贝,拷贝的只是指针地址,一旦我通过这个地址修改了值,那么原来的内存保存的值也会变化 2.mutablecopy  深拷贝,产生新对象 copy与mutablecopy区别在于返回的值,copy返回不可变对象,mutableCopy返回可以变化的值

OC中的static关键字

1.修饰局部变量      1.只会初始化一次      2.全局只会存在一份内存      3.不会改变自身的作用域,比如原来是局部变量现在的话依然是局部变量      4.生命周期延长(直到程序结束,这个局部变量才会被销毁)      2.  修饰全局变量     static 修饰的全局变量 在整个工程 中只会存在一份     只可以在当前的.h .m文件中才可以访问。 如果单纯全局变量的

#ifndef #define #endif 和 extern C的作用

ifndef #define #endif 防止头文件被重复引用 被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的。比如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include “a.h” 和#include "c.h"此时就会造成c.h重复引用。 头文件被重复引用引起的后果: 有些头文件重复引用只是

PHP中静态(static)调用非静态方法详解

1.PHP中可以静态调用非静态方法么? 今天我被问到PHP中可不可以使用 className::methodName() 的方法来调用一个没有声明static的方法。在我的印象中,我好像是见过这种用法,但又有些不确定。大家都知道,在手册或者教程里,方法被分为静态方法 和非静态方法,通常我们静态调用的方法,肯定是静态方法。 那如果我们调用了非静态方法会怎么样呢?首先做测试。 1

php函数内的static变量以及类static方法

A: 函数内的static变量 static静态变量的理解 静态变量 类型说明符是static。 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在 静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直 到整个程序运行结束(相反,而auto自动变量,即动态局部变量,属于动态存储类别,占动态存

【C++】初始化列表、匿名对象、static成员、友元、内部类

文章目录 一、初始化列表构造函数体赋值初始化列表explicit关键字 二、匿名对象三、static成员四、友元友元函数友元类 五、内部类六、练习题 一、初始化列表 构造函数体赋值 实际上,构造函数的函数体内,并不是对 对象 初始化的地方,而是对成员变量进行赋值。因为初始化只能初始化一次,而构造函数体内可以多次赋值。 class Date{public:Date(int

abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized

1,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized 都不可以,因为abstract申明的方法是要求子类去实现的,abstract只是告诉你有这样一个接口,你要去实现,至于你的具体实现可以是native和synchronized,也可以不是,抽象方法是不关心这些事的,所以写这两个是没有意义的。然后,static方法是不会被覆

iOS OC底层面试题(KVO (Key-value observing))

KVO (Key-value observing) KVO是观察者模式的另一实现。 使用了isa混写(isa-swizzling)来实现KVO 使用setter方法改变值KVO会生效,使用setValue:forKey即KVC改变值KVO也会生效,因为KVC会去调用setter方法 - (void)setValue:(id)value{[self willChangeValueForKey