当前位置: 首页 > news >正文

假期学习--iOS中的static关键字

iOS中的static关键字

OC的static关键字

  • OC也提供了Static关键字,但是这个static关键字不能用于修饰成员变量,也就是说Static是不被允许修饰实例变量,同时Static关键字也不被允许修饰方法。
  • Static关键字可以修饰全局变量,局部变量。
  • 被static修饰的全部变量或者局部变量都会存在于内存的静态区,最后由系统释放。此时这个变量就是静态全局变量

所谓静态局部变量和静态全局变量就是在全局变量和局部变量前面加上Static关键

全局变量
  • 存储方式:静态存储,存储在全局(静态)区
  • 生命周期:静态存储方式决定了其生命周期为 从程序开始运行到程序结束
  • 作用域:该程序的所有文件。
静态全局变量
  • 存储方式:静态存储,保存在全局静态区
  • 生命周期: 从程序开始到程序运行结束
  • 作用域: 只有声明了该变量的文件才能访问到

对于全局变量而言,Static改变了全局变量的作用域, 普通全局变量是在所有的文件里都可以访问到,但是Static修饰的全局变量只可以当前的文件里访问到
如此看来,static修饰地全局变量到达到了对于其他文件隐藏该全局变量的目的,这也就是Static的第一个作用

#import "Person.h"NSSting *name = @"iOS"  //全局变量,在其他文件中通过 extern 关键字 可以访问到。static NSSting *nikeNmae = @"Lyt" //静态全局变量,只可以在本文件中访问到。@implementation Person@end
局部变量
  • 存储方式:动态存储, 存储在堆(对象类型)或栈(数据类型)中
  • 生命周期:动态存储方式决定了其生命周期为 变量使用期间
  • 作用域:方法和函数内,确切的说从申明到遇到 ‘}‘ 为止。
静态局部变量
  • 存储方式: 静态存储,存储在全局静态区
  • 生命周期: 从程序开始到程序结束
  • 作用域: 方法和函数内,从声明到函数截止

对于局部变量:由Static修饰的静态局部变量和普通局部变量的作用域是一样的,但是存储方式不同,导致了他们的生命周期也是不同的
这样的话,static改变了局部变量的存储方式,从而达到保存变量的目的,这是第二个作用

int main(int argc, const char * argv[]) {@autoreleasepool {int i = 0;while (i < 5){NSUInteger localInt = 0;static NSUInteger staticLocalInt = 0;NSLog(@"局部变量的值是 %lu, 静态局部变量 = %lu", localInt, staticLocalInt);localInt++;staticLocalInt++;i++;}}
  • 局部变量是动态存储方式,程序运行时候,localInt分配内存,调用结束时立即收回内存,下次调用在重新分配内存。所以数据是无法保存的。
  • 静态局部变量是静态存储方式,程序开始运行时,staticLocalInt分配内存,只分配这一次内存,也就是说只初始化一次,程序调用结束时并不收回,而是等到程序结束时才收回。

总结

  • 静态存储和动态存储
  • 存储方式会决定变量的生命周期
  • 静态存储的变量是加上Static关键字的全局变量和局部变量,它们存储在全局静态区域
  • 全局变量、静态全局变量、静态局部变量采用静态存储方式,局部变量采用动态存储方式。
  • 对于全局变量来说,static 改变了其作用域;对于局部变量来说,static改变了其存储方式,从而改变了生命周期。
http://www.lryc.cn/news/448020.html

相关文章:

  • Maya没有Arnold材质球
  • 面试知识点总结篇三
  • 数据加密标准(DES)详解:原理、步骤及Python实现
  • 每日OJ_牛客_OR59字符串中找出连续最长的数字串_双指针_C++_Java
  • 虚幻引擎UE5如何云渲染,教程来了
  • 使用Python实现图形学光照和着色的光线追踪算法
  • 通过openAI的Chat Completions API实现一个支持追问的ChatGPT功能集成
  • 8,STM32CubeMX配置SPI工程(读取norflash的ID)
  • 【MATLAB源码-第178期】基于matlab的8PSK调制解调系统频偏估计及补偿算法仿真,对比补偿前后的星座图误码率。
  • AIGC学习笔记—minimind详解+训练+推理
  • 计算机毕业设计 在线项目管理与任务分配系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 小程序用户截屏事件
  • HashMap为什么线程不安全?如何实现线程安全
  • Python爬虫之requests模块(一)
  • 当微服务中调度返回大数据量时如何处理
  • 【项目经验分享】深度学习点云算法毕业设计项目案例定制
  • 【Redis 源码】2项目结构说明
  • RP2040 C SDK GPIO和IRQ 唤醒功能使用
  • @Transactional导致数据库连接数不够
  • python3中的string 和bytes有什么区别
  • C~排序算法
  • 基于github创建个人主页
  • apt update时出现证书相关问题,可以关闭apt验证
  • 进阶数据库系列(十三):PostgreSQL 分区分表
  • 翻译:Recent Event Camera Innovations: A Survey
  • 车载诊断技术:汽车健康的守护者
  • “天翼云息壤杯”高校AI大赛开启:国云的一场“造林”计划
  • 【怎样基于Okhttp3来实现各种各样的远程调用,表单、JSON、文件、文件流等待】
  • excel统计分析(3): 一元线性回归分析
  • 搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(一)-概述