iOS const static extern

2024-05-26 20:48
文章标签 ios static const extern

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

一、const与宏的区别

const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量。

  • 编译时刻:宏是预编译(编译之前处理),const是编译阶段。
  • 编译检查:宏不做检查,不会报编译错误,只是替换,const会编译检查,会报编译错误。
  • 宏的坏处:使用大量宏,容易造成编译时间久,每次都需要重新替换。
// 常见的常量:抽成宏
#define Account @"account"#define UserDefault [NSUserDefaults standardUserDefaults]// 字符串常量
static NSString * const account = @"account";- (void)viewDidLoad {[super viewDidLoad];// 偏好设置存储// 使用宏[UserDefault setValue:@"123" forKey:Account];// 使用const常量[[NSUserDefaults standardUserDefaults] setValue:@"123" forKey:account];}

二、const作用:限制类型

  • 1.const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p)
  • 2.被const修饰的变量是只读的。
- (void)viewDidLoad {[super viewDidLoad];// 定义变量int a = 1;// 允许修改值a = 20;// const两种用法// const:修饰基本变量p// 这两种写法是一样的,const只修饰右边的基本变量bconst int b = 20; // b:只读变量int const b = 20; // b:只读变量// 不允许修改值b = 1;// const:修饰指针变量*p,带*的变量,就是指针变量.// 定义一个指向int类型的指针变量,指向a的地址int *p = &a;int c = 10;p = &c;// 允许修改p指向的地址,// 允许修改p访问内存空间的值*p = 20;// const修饰指针变量访问的内存空间,修饰的是右边*p1,// 两种方式一样const int *p1; // *p1:常量 p1:变量int const *p1; // *p1:常量 p1:变量// const修饰指针变量p1int * const p1; // *p1:变量 p1:常量// 第一个const修饰*p1 第二个const修饰 p1// 两种方式一样const int * const p1; // *p1:常量 p1:常量int const * const p1;  // *p1:常量 p1:常量}

三、const开发中使用场景:

  • 1.当一个方法参数只读
  • 2.定义只读全局变量
// 定义只读全局常量
NSString * const str  = @"123";// 当一个方法的参数,只读.
- (void)test:(NSString * const)name
{}// 指针只读,不能通过指针修改值
- (void)test1:(int const *)a{//    *a = 10;
}// 基本数据类型只读
- (void)test2:(int const)a{}

四、static和extern简单使用

  • static作用:

    • 修饰局部变量:
    • 1.延长局部变量的生命周期,程序结束才会销毁。
    • 2.局部变量只会生成一份内存,只会初始化一次。

    • 修饰全局变量

    • 1.只能在本文件中访问,修改全局变量的作用域,生命周期不会改
  • extern作用:
    • 只是用来获取全局变量(包括全局静态变量)的值,不能用于定义变量
  • extern工作原理:

    • 先在当前文件查找有没有全局变量,没有找到,才会去其他文件查找。
// 全局变量:只有一份内存,所有文件共享,与extern联合使用。
int a = 20;// static修饰全局变量
static int age = 20;- (void)test
{// static修饰局部变量static int age = 0;age++;NSLog(@"%d",age);
}- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.[self test];[self test];extern int age;NSLog(@"%d",age);
}

五、static与const联合使用

  • static与const作用:声明一个只读的静态变量
  • 开发使用场景:在一个文件中经常使用的字符串常量,可以使用static与const组合
// 开发中常用static修饰全局变量,只改变作用域// 为什么要改变全局变量作用域,防止重复声明全局变量。// 开发中声明的全局变量,有些不希望外界改动,只允许读取。// 比如一个基本数据类型不希望别人改动// 声明一个静态的全局只读常量
static const int a = 20;// staic和const联合的作用:声明一个静态的全局只读常量// iOS中staic和const常用使用场景,是用来代替宏,把一个经常使用的字符串常量,定义成静态全局只读变量.// 开发中经常拿到key修改值,因此用const修饰key,表示key只读,不允许修改。
static  NSString * const key = @"name";// 如果 const修饰 *key1,表示*key1只读,key1还是能改变。static  NSString const *key1 = @"name";

六、extern与const联合使用

开发中使用场景:在多个文件中经常使用的同一个字符串常量,可以使用extern与const组合。
原因:

static与const组合:在每个文件都需要定义一份静态全局变量。
extern与const组合:只需要定义一份全局变量,多个文件共享。

全局常量正规写法:开发中便于管理所有的全局变量,通常搞一个GlobeConst文件,里面专门定义全局变量,统一管理,要不然项目文件多不好找。

GlobeConst.h

#import <UIKit/UIKit.h>/** UITabBar高度 */
UIKIT_EXTERN CGFloat const LLTabBarH;/** 标题栏高度 */
UIKIT_EXTERN CGFloat const LLTitleViewH;/** 导航栏最大Y值 */
UIKIT_EXTERN CGFloat const LLNavMaxY;/** tabBarButton被重复点击的通知 */
UIKIT_EXTERN NSString * const LLTabBarButtonDidRepeatClickNotification;/** titleButton被重复点击的通知 */
UIKIT_EXTERN NSString * const LLTitleButtonDidRepeatClickNotification;

GlobeConst.m

/** UITabBar高度 */
CGFloat const LLTabBarH = 49;/** 标题栏高度 */
CGFloat const LLTitleViewH = 35;/** 导航栏最大Y值 */
CGFloat const LLNavMaxY = 64;/** tabBarButton被重复点击的通知 */
NSString * const LLTabBarButtonDidRepeatClickNotification = @"LLTabBarButtonDidRepeatClickNotification";/** titleButton被重复点击的通知 */
NSString * const LLTitleButtonDidRepeatClickNotification = @"LLTitleButtonDidRepeatClickNotification";

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



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

相关文章

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

native和static native区别

本文基于Hello JNI  如有疑惑,请看之前几篇文章。 native 与 static native java中 public native String helloJni();public native static String helloJniStatic();1212 JNI中 JNIEXPORT jstring JNICALL Java_com_test_g

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

iOS剪贴板同步到Windows剪贴板(无需安装软件的方案)

摘要 剪贴板同步能够提高很多的效率,免去复制、发送、复制、粘贴的步骤,只需要在手机上复制,就可以直接在电脑上 ctrl+v 粘贴,这方面在 Apple 设备中是做的非常好的,Apple 设备之间的剪贴板同步功能(Universal Clipboard)确实非常方便,它可以在 iPhone、iPad 和 Mac 之间无缝传输剪贴板内容,从而大大提高工作效率。 但是,iPhone 如何和 Wind

iOS项目发布提交出现invalid code signing entitlements错误。

1、进入开发者账号,选择App IDs,找到自己项目对应的AppId,点击进去编辑, 2、看下错误提示出现  --Specifically, value "CVYZ6723728.*" for key "com.apple.developer.ubiquity-container-identifiers" in XX is not supported.-- 这样的错误提示 将ubiquity

我的第一次份实习工作-iOS实习生-第三个月

第三个月 这个月有一个考核项目,是一个电子书阅读器,组长说很重要,是我的实习考核项目。 我的项目XTReader,这是我参考网上的一些代码,和模仿咪咕阅读做的,功能还不完善,数据的部分是用聚合数据做的。要收费的。   还有阅读页面,基本功能实现了一下。使用了autolayout,自适应布局,也是第一次用网络,第一次用数据库,第一次用自动布局。还有很多不足。 做了一周多,有个问题一直没

我的第一次份实习工作-iOS实习生-公司使用过的软件

bittorrentsync 素材,文件同步软件 cornerstone svn 软件开发合作 mark man 测量坐标的软件 SQLLite Manager 数据库操作软件

我的第一次份实习工作-iOS实习生-第二个月

第二个月 来公司过了一个月了。每天早上9点上班,到晚上6.30下班,上下班要指纹打卡,第一个月忘了打卡好多次(),然后还要去补打卡单。公司这边还安排了,工资卡办理,招商银行卡。开了一次新员工大会,认识了公司的一些过往,公司的要求等,还加了一下公司的企业QQ,还有其他的羽毛球群,篮球群。我加了下羽毛球群,也去打了一两次。第二个月的感受,感觉跟组里面的交流跟沟通都好少,基本上还有好多人不认识。想想也

我的第一次份实习工作-iOS实习生-第一个月

实习时间:2015-08-20 到 2015-12-25  实习公司;福建天棣互联有限公司 实习岗位:iOS开发实习生 第一个月: 第一天来公司,前台报道后,人资带我去我工作的地方。到了那,就由一个组长带我,当时还没有我的办公桌,组长在第三排给我找了一个位置,擦了下桌子,把旁边的准备的电脑帮我装了下,因为学的是iOS,实习生就只能用黑苹果了,这是我实习用的电脑。 帮我装了一下电脑后,开机