C语言 非静态方法给静态变量赋值,从在.h头文件中赋值并初始化static变量谈谈预编译和链接...

写这篇文章的原因:

之前组里一个队友在写OC的时候,在OC的.h头文件里初始化并赋值了一个静态的字符串变量,并在多个.m实现文件引入了这个头文件然后使用了这个静态成员变量(虽然这种做法不提倡),导致程序出现了一些奇奇怪怪的行为(每个.m文件中的静态变量都不一样),他找了很久也百思不得解。这里我就针对这个问题谈谈预编译过程,以及浅谈相关的编译和链接的一些知识,希望对大家有帮助,也欢迎大神吐槽拍砖:

18dd22ff05d6

文章结构图.png 在.h中添加静态变量的情况如下:

18dd22ff05d6

s1.png

那我们开始,首先普及一下概念

静态变量:

-----首先普及一下加上 static 关键字的静态变量的特性:OC 是基于 C 语言的,在C语言中一个变量加上 static 关键字代表这个变量是只能在当前文件内使用的,并且在当前文件内同名的静态成员变量只能有一个,如果有多个那么后初始化并赋值的静态变量会把之前同名的覆盖。

预编译:

然后简单讲讲预编译:预编译就是在编译之前由IDE(对我们来说就是XCODE)对文件进行的一些处理,其中包括:1.宏替换(#define); 2.文件包含(#import) ;和 3.条件编译(#if #endif); 三项。这里只介绍概念,后文会细说。当然这个阶段还会对我们写的注释进行处理比如 #pragma 。通俗的说预编译就是对带 “井” 前缀(#***)的部分进行处理和简单的替换操作。那么以下我就针对开头我说的,在头文件中引入静态变量问题开始讲:

1.首先讲讲本次测试用的类的结构和方法,如下图:

首先是 ContainStringClass 类的 .h 文件中有一个静态变量方法:

static NSString *staticString = @“origin”;

然后是它的两个方法,一个是改变静态变量 staticString 值的方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值