extern,const,#define

简介: extern,const,#define

要做一个全局,您会怎么写?大多数开发者都会首选#define来定义一个全局参数,如数字,字符串,可是当你了解足够深,你会发现#define定义的参数是没有类型的,但是在使用的时候你发现+-*/是没有问题的,因为#define宏在预处理时只是实现了替换了,具体的运算是在编辑时才完成的。


这里推荐一种写法:const(不可变量)

static const int count = 10;

这样写的好处就是可以直接决定定义的值的具体类型。减少了拷贝次数,这里说明下,#define定义的宏是立即数,const是给定一个地址,所以在运行中,const存在于全局的静态区,只有一个地址,#define使用时会造成多次拷贝,所以在没有了存储和读内存的情况下效率也相对的变高了。


最后来说一下extern的用法,作用是饮用在另一个地方已经存在的全局变量;

比如在A类中有一个全局变量(注意全局变量,在@implementation和@interface之外),有一个值,但是在别的类中我想使用这个值,要么存本地,要么存数据库来访问,但是extern可以帮你直接访问到这个全局变量。

#import "A.m"
@interface SecViewController ()
@end
NSString *myName;
@implementation SecViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    myName = @"CodeLiu";    
}
#import "B.m"
@interface SecViewController ()
@end
extern NSString *myName;
@implementation SecViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    NSLog(@"%@",myName);
也可以加const修饰,但是请注意const的用法和意义。
注:此方法对于字典和数组同样适用。

可下载Demo查看具体细节:点击下载

目录
相关文章
|
运维 监控 测试技术
自动化运维实践:CI/CD流程详解
【6月更文挑战第30天】CI/CD实践推动软件开发自动化,通过持续集成确保代码质量,自动部署提升交付速度。核心流程包括:代码管理(Git等)、自动化构建与测试、代码审查、部署。关键点涉及选择工具、测试覆盖率、监控及团队协作。采用CI/CD能减少错误,但需应对挑战,如工具选型、全面测试和团队沟通。
3162 2
|
11月前
|
人工智能
Nature:ChatGPT助力科研工作的方法
生成式AI在科研中的应用日益广泛,不仅提升了论文写作和编辑的效率,还在同行评审和学术反馈中展现出巨大价值。本文探讨了如何将AI作为科研的“合作者”而非“代替者”,并通过提供高质量的提示词和知识储备,让AI更好地服务于学术研究。
232 0
Nature:ChatGPT助力科研工作的方法
|
缓存 监控 负载均衡
apigataway产品介绍
apigataway产品介绍
214 6
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
394 0
|
网络安全 Shell
|
测试技术
Axure 获取验证码
Axure 获取验证码
194 0
|
机器学习/深度学习 人工智能 自然语言处理
再超Transformer!Google提出两个新模型(Griffin、Hawk),强于Mamba,更省资源
【2月更文挑战第15天】再超Transformer!Google提出两个新模型(Griffin、Hawk),强于Mamba,更省资源
423 1
再超Transformer!Google提出两个新模型(Griffin、Hawk),强于Mamba,更省资源
|
索引 Python
模拟实现一个简单的string类
这个示例中,定义了一个简单的 `MyString`类,包含了常用的字符串操作,比如初始化、字符串拼接、长度获取、索引访问、大小写转换、相等判断等功能。请根据需求进行适当的修改和扩展。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
59 0
流式系统:第五章到第八章
流式系统:第五章到第八章
129 0
多线程中的run方法和start方法有什么区别?
多线程中的run方法和start方法有什么区别?
203 0