const、static和extern的正确使用方式
我们在看一些大牛的第三方时,里面会出现很多const、static和extern,尤其是const和static,const和extern的结合使用,直接令很多小伙伴懵逼了,今天就详细讲解一下这三个关键字的正确使用方式。
一、const
const的作用和宏是很类似的,其实,苹果是不推荐我们使用宏的,它更喜欢我们使用const,于是乎,在swift中宏就被抛弃了,我们只能使用const。
在这里简单聊一下const和宏的区别:
1.编译时刻 宏:预编译 const:编译
2.编译检查 宏没有编译检查,不会报编译错误,只是替换;const有编译检查,会报编译错误
3.宏的好处 宏能定义一些函数,方法,但是const不可以
4.宏的坏处 大量使用宏,会导致预编译时间过长。
const有两个作用:
1.修饰右边的基本变量和指针变量;
2.被const修饰的变量只读,也就是只能获取,不能修改。
const的使用场景:
1.修饰全局变量 ==>全局只读变量 ==> 代替宏
2.修饰方法中的参数
代码如下:
NSString * const gender = @"gender";
[[NSUserDefaults standardUserDefaults] objectForKey:gender];
二、static
static有两个作用:
1.修饰局部变量:被static修饰的局部变量,可以延长生命周期,生命周期跟整个应用程序一致;被static修饰的局部变量,只会分配一次内存。
代码如下:
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event {
static int i = 0;
i++;
NSLog(@"%d", i);
}
2.修饰全局变量:被static修饰的全局变量,作用域会修改,生命周期不会改,只能在当前文件下使用。
代码如下:
static int m = 0;
三、extern
extern作用:声明外部全局变量。
extern工作原理:先会去当前文件下查找有没有对应全局变量,如果没有,才会去其他文件查找。
四、static和const的结合使用
static,const结合使用的作用:声明一个只读的全局静态变量。
开发使用场景:在一个文件中经常使用的字符串常量,可以使用static与const组合。
代码如下:
static NSString * const name = @"name";
[[NSUserDefaults standardUserDefaults] setObject:@"123" forKey:name];
五、extern和const的结合使用
使用场景:在多个文件中经常使用的同一个字符串常量,可以使用extern与const组合。
开发时有个规定,为了避免重复报错,全局变量不能定义在自己的类中,我们需要自己创建一个全局文件管理全局东西。
创建一个全局类GlobelConst。
代码如下:
#import<Foundation/Foundation.h>
extern NSString * const discover_name;
extern NSString * const home_name;
#import "GlobelConst.h"
//定义整个项目中的全局变量
/********** 发现模块 **********/
NSString * const discover_name = @"name";
/********** 首页模块 **********/
NSString * const home_name = @"name";
[[NSUserDefaults standardUserDefaults] setObject:@"123" forKey:discover_name];
[[NSUserDefaults standardUserDefaults] objectForKey:discover_name];
const、static和extern的正确使用方式的更多相关文章
- iOS正确使用const,static,extern
static 修饰局部变量 让局部变量只初始化一次 局部变量在程序中只有一份内存 并不会改变局部变量的作用域,仅仅是改变了局部变量的生命周期(只到程序结束,这个局部变量才会销毁) 修饰全局变量 全局变 ...
- 如何正确使用const、static、extern
转自:http://www.jianshu.com/p/2fd58ed2cf55 前言 本篇文章主要介绍在开发中怎么使用const.static.extern关键字. 一.const 与宏的区别: c ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- 李洪强iOS经典面试题155 - const,static,extern详解(面试必备)
李洪强iOS经典面试题155 - const,static,extern详解(面试必备) 一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽 ...
- const,static,extern简介
一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 编译时刻:宏是预编译(编译之前处理),const是编译阶段. 编 ...
- const,static,extern简介(重要)
一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 编译时刻:宏是预编译(编译之前处理),const是编译 ...
- 88、const、static、extern介绍
一.const与宏的区别 const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编译(编译之前处理)const是编译阶段. 编译检 ...
- 《OOC》笔记(1)——C语言const、static和extern的用法
<OOC>笔记(1)——C语言const.static和extern的用法 C语言中const关键字用法不少,我只喜欢两种用法.一是用于修饰函数形参,二是用于修饰全局变量和局部变量. 用c ...
- iOS 中 const static extern 关键字总结
在看一些高手所写的代码时,总是可以看到我们小白平常不用的关键字,一次,两次,三次,不能总是不明不白,现在总结一下日常开发中常用的关键字的作用: 关键字const/static/extern的释义和用法 ...
随机推荐
- windows下hla编译环境配置(转)_1
原文地址:http://blog.chinaunix.net/uid-20548989-id-1667169.html HLA简介 HLA,英文"High Level Ass ...
- session过期时间
在一般系统登录后,都会设置一个当前session失效的时间,以确保在用户没有使用系统一定时间后,自动退出登录,销毁session. 具体设置很简单: 在主页面或者公共页面中加入:session.set ...
- vs2010 2013 2015+ 必备插件精选(15个)
转 http://www.spersky.com/post/vsPlugins.html 我目前主要用的是Hide Main Page——公司配给的电脑屏幕分辨率好小,还是1366*768的,去掉头可 ...
- Open Live Writer 安装
Open Live Writer来源 Windows Live Writer在2012年就停止了更新,Open Live Writer是由Windows Live WriterWriter更名而来,是 ...
- centos7 使用systemd 自定义关机前脚本
systemd (centos7) 需求,关机前执行脚本 关机脚本vi /usr/bin/shutdown_cust.sh#!/bin/bashecho "zhengchangguanji& ...
- 简单理解js的prototype属性
在进入正文之前,我得先说说我认识js的prototype这个东西的曲折过程. 百度js的prototype的文章,先看看,W3School关于prototype的介绍: 你觉得这概念适合定义js的pr ...
- xcode调整debug,release模式
今天调试的时候发现变量都不能查看了.在「lldb」中通过「po」命令来查看总是提示变量未找到. 环境 xcode 7, Swift 2 错误提示 ‘XXXX’ was compiled with op ...
- GPS部标平台的架构设计(三) 基于struts+spring+hibernate+ibatis+quartz+mina框架开发GPS平台
注意,此版本是2014年研发的基于Spring2.5和Struts2的版本,此版本的源码仍然销售,但已不再提供源码升级的服务,因为目前我们开发的主流新版本是2015-2016年近一年推出的基于spri ...
- 前端forEach在Array、map、set中的使用
数组: var s = ['a','b','c']; s.forEach(function(ele,index,array){ console.log(ele); }); Map: var map = ...
- Web页面中5种超酷的Hover效果
hover 效果能给网页增加一些动态效果,并且使得站点更具有活力.原来的做法是使用javascript来实现这些动态效果,但是随着CSS3的引入和现代浏览器 的支持,我们可以用纯粹的CSS代码来实现这 ...