当前位置: 首页 > 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改变了其存储方式,从而改变了生命周期。

相关文章:

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

iOS中的static关键字 OC的static关键字 OC也提供了Static关键字&#xff0c;但是这个static关键字不能用于修饰成员变量&#xff0c;也就是说Static是不被允许修饰实例变量&#xff0c;同时Static关键字也不被允许修饰方法。Static关键字可以修饰全局变量&#xff0c;局部变量…...

Maya没有Arnold材质球

MAYA 没有Arnold材质球_哔哩哔哩_bilibili...

面试知识点总结篇三

一、arm中断流程和函数 ARM 中断流程 中断触发保存上下文中断向量表执行ISR - 清除中断标志恢复上下文返回中断 二、STM32任务间通信有哪些方式 消息队列、 信号量、共享内存、任务通知 三、uboot内存没驱动之前是怎么操作的 硬件初始化内存检测设置内存映射控制台初始化…...

数据加密标准(DES)详解:原理、步骤及Python实现

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…...

每日OJ_牛客_OR59字符串中找出连续最长的数字串_双指针_C++_Java

目录 牛客_OR59字符串中找出连续最长的数字串 题目解析 C代码1 C代码2 C代码3 Java代码 牛客_OR59字符串中找出连续最长的数字串 字符串中找出连续最长的数字串_牛客题霸_牛客网 题目解析 双指针&#xff1a; 遍历整个字符串&#xff0c;遇到数字的时候&#xff0c;用双…...

虚幻引擎UE5如何云渲染,教程来了

​步骤一&#xff1a;获取云渲染权限 访问渲染101官网&#xff0c;使用云渲码6666进行注册。 下载并安装渲染客户端。 步骤二&#xff1a;设置渲染环境 确保云渲染环境与您的本地环境一致&#xff0c;避免出错。 步骤三&#xff1a;任务提交 完成环境配置后&#xff0c;解析…...

使用Python实现图形学光照和着色的光线追踪算法

目录 使用Python实现图形学光照和着色的光线追踪算法引言1. 光线追踪算法概述2. Python实现光线追踪算法2.1 向量类2.2 光源类2.3 材质类2.4 物体类2.5 光线追踪器类2.6 使用示例 3. 实例分析4. 光线追踪算法的优缺点4.1 优点4.2 缺点 5. 改进方向6. 应用场景结论 使用Python实…...

通过openAI的Chat Completions API实现一个支持追问的ChatGPT功能集成

文章目录 前言准备工作代码实现思路完整代码实现备注前言 本文介绍如何通过openAI的Chat Completions API实现一个支持追问的后台功能,追问打个比方,就是当你问了一句”窗前明月光的下一句是什么?“之后,想再往下问就可以直接问”再下一句呢?“,模型也能基于上下文理解你…...

8,STM32CubeMX配置SPI工程(读取norflash的ID)

1&#xff0c;前言 单片机型号&#xff1a;STM32F407 编程环境 &#xff1a;STM32CubeMX Keil v5 硬件连接 &#xff1a;SPI1&#xff0c;CS/SS--->PB14 注&#xff1a;本工程在1&#xff0c;STM32CubeMX工程基础&#xff08;配置Debug、时钟树&#xff09;基础上完…...

【MATLAB源码-第178期】基于matlab的8PSK调制解调系统频偏估计及补偿算法仿真,对比补偿前后的星座图误码率。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 在通信系统中&#xff0c;频率偏移是一种常见的问题&#xff0c;它会导致接收到的信号频率与发送信号的频率不完全匹配&#xff0c;进而影响通信质量。在调制技术中&#xff0c;QPSK&#xff08;Quadrature Phase Shift Keyi…...

AIGC学习笔记—minimind详解+训练+推理

前言 这个开源项目是带我的一个导师&#xff0c;推荐我看的&#xff0c;记录一下整个过程&#xff0c;总结一下收获。这个项目的slogan是“大道至简”&#xff0c;确实很简。作者说是这个项目为了帮助初学者快速入门大语言模型&#xff08;LLM&#xff09;&#xff0c;通过从零…...

计算机毕业设计 在线项目管理与任务分配系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

小程序用户截屏事件

原生小程序&#xff1a; wx.setScreenBrightness({value: 0.5 }); 参数值&#xff1a; value屏幕亮度值&#xff0c;范围 0~1&#xff0c;0 最暗&#xff0c;1 最亮 uniapp&#xff1a; uni.setScreenBrightness({value: 0.5 }); 参数值&#xff1a; value屏幕亮度值&a…...

HashMap为什么线程不安全?如何实现线程安全

HashMap线程不安全的原因主要可以从以下几个方面解释&#xff1a; 1. 数据覆盖 假设两个线程同时执行put操作&#xff0c;并且它们操作的键产生相同的哈希码&#xff0c;导致它们应该被插入到同一个桶中。以下是可能发生的情况&#xff1a; 线程A读取桶位置为空&#xff0c;准…...

Python爬虫之requests模块(一)

Python爬虫之requests模块&#xff08;一&#xff09; 学完urllib之后对爬虫应该有一定的了解了&#xff0c;随后就来学习鼎鼎有名的requests模块吧。 一、requests简介。 1、什么是request模块&#xff1f; requests其实就是py原生的一个基于网络请求的模块&#xff0c;模拟…...

当微服务中调度返回大数据量时如何处理

FeignClient 和 Dubbo 可能不是最佳选择。以下是一些适合处理大数据量的技术和方法&#xff1a; 消息队列 简介&#xff1a;消息队列是一种异步通信方式&#xff0c;用于在不同系统之间传递消息。常见的消息队列包括 RabbitMQ、Kafka、ActiveMQ 等。 优点&#xff1a;消息队列…...

【项目经验分享】深度学习点云算法毕业设计项目案例定制

以下是深度学习与点云算法相关的毕业设计项目案例&#xff0c;涵盖了点云数据的分类、分割、重建、配准、目标检测等多个领域&#xff0c;适用于智能驾驶、机器人导航、3D建模等多个应用场景&#xff1a; 案例截图&#xff1a; 基于PointNet的3D点云分类与分割PointNet在大规…...

【Redis 源码】2项目结构说明

1 文件目录结构 deps 这个目录主要包含 Redis 所依赖的第三方代码库。 Jemalloc&#xff0c;内存分配器&#xff0c;默认情况下选择该内存分配器来代替 Linux 系统的 libc-malloc&#xff0c;libc-malloc 性能不高&#xff0c;且碎片化严重。hiredis&#xff0c;这是官方 C 语…...

RP2040 C SDK GPIO和IRQ 唤醒功能使用

RP2040 C SDK GPIO和中断功能使用 SIO介绍 手册27页&#xff1a; The Single-cycle IO block (SIO) contains several peripherals that require low-latency, deterministic access from the processors. It is accessed via each processor’s IOPORT: this is an auxiliary…...

@Transactional导致数据库连接数不够

在Spring中进行事务管理非常简单&#xff0c;只需要在方法上加上注解Transactional&#xff0c;Spring就可以自动帮我们进行事务的开启、提交、回滚操作。甚至很多人心里已经将Spring事务Transactional划上了等号&#xff0c;只要有数据库相关操作就直接给方法加上Transactiona…...

用51单片机和HC-SR04超声波模块DIY一个倒车雷达(附完整代码和立创EDA原理图)

51单片机与HC-SR04超声波模块实战&#xff1a;打造高精度倒车雷达系统 在汽车电子和智能硬件领域&#xff0c;倒车雷达作为基础安全装置&#xff0c;其DIY实现不仅能帮助理解超声波测距原理&#xff0c;更是掌握嵌入式系统开发的绝佳实践。本文将手把手教你使用经典的STC89C52单…...

GitClaw:基于Go的轻量级Git钩子服务器与集中式权限管理方案

1. 项目概述与核心价值如果你是一名开发者&#xff0c;尤其是经常在团队协作中处理Git仓库的工程师&#xff0c;那么你一定对“权限管理”这四个字又爱又恨。爱的是它能保障代码安全&#xff0c;恨的是它配置起来繁琐&#xff0c;尤其是在处理跨项目、跨团队的复杂权限矩阵时。…...

Windows上运行Swift代码的三种实战路径

1. 为什么Windows开发者需要Swift&#xff1f; Swift作为苹果生态的主力编程语言&#xff0c;近年来在服务端开发、机器学习等领域的应用越来越广泛。但很多刚接触Swift的Windows开发者会发现&#xff1a;官方文档里压根没提Windows支持&#xff01;这其实是因为Swift最初就是…...

数据流编排与异步任务调度中间件kelivo部署与实战指南

1. 项目概述与核心价值最近在折腾一个挺有意思的项目&#xff0c;叫“Chevey339/kelivo”。乍一看这个标题&#xff0c;可能有点摸不着头脑&#xff0c;它不像那些直接告诉你“XX管理系统”或“XX工具库”的项目名那么直白。但恰恰是这种看似神秘的命名&#xff0c;背后往往隐藏…...

Grad-CAM实战:用热力图透视神经网络的决策焦点

1. Grad-CAM技术初探&#xff1a;为什么我们需要热力图&#xff1f; 当你训练了一个图像分类模型&#xff0c;准确率高达95%&#xff0c;但你真的了解它是如何做出判断的吗&#xff1f;我曾在项目中遇到过这样的尴尬&#xff1a;模型把一只坐在草地上的哈士奇误判为"狼&qu…...

AI控制协议标准(ACPS):构建智能体与工具交互的通用语言

1. 项目概述与核心价值最近在开源社区里&#xff0c;一个名为“AI-Control-Protocol-Standard”的项目引起了我的注意。这个由DaibinThink发起的项目&#xff0c;名字听起来就很有分量——“AI控制协议标准”。乍一看&#xff0c;你可能觉得这又是一个关于AI模型如何被调用的技…...

从零部署开源语音助手:OpenClaw项目实战与二次开发指南

1. 项目概述&#xff1a;从开源代码到可用的语音助手看到leilei926524-tech/openclaw-voice-assistant这个项目标题&#xff0c;我的第一反应是&#xff1a;又一个基于开源代码的语音助手项目。在GitHub上&#xff0c;类似的项目多如牛毛&#xff0c;但真正能让一个普通开发者&…...

AI编码工具选型指南:从原理到实践的全方位解析

1. 项目概述&#xff1a;为什么我们需要一份AI编码工具的“藏宝图”如果你是一名开发者&#xff0c;过去一年里&#xff0c;你的工作流可能已经被AI工具彻底重塑了。从最初用ChatGPT写几行注释&#xff0c;到后来用GitHub Copilot自动补全整段代码&#xff0c;再到如今各种能直…...

Flutter桌面端窗口控制:从隐藏标题栏到自定义全屏交互

1. 为什么需要自定义窗口控制&#xff1f; 当你用Flutter开发Windows桌面应用时&#xff0c;系统默认的标题栏和窗口样式往往显得格格不入。想象一下&#xff0c;你精心设计了一套深色主题的UI&#xff0c;结果顶部突然冒出一条灰白色的标准标题栏——就像给西装革履的绅士戴了…...

5分钟快速上手:PlantUML Editor - 告别拖拽,用代码绘制专业UML图表

5分钟快速上手&#xff1a;PlantUML Editor - 告别拖拽&#xff0c;用代码绘制专业UML图表 【免费下载链接】plantuml-editor PlantUML online demo client 项目地址: https://gitcode.com/gh_mirrors/pl/plantuml-editor 还在为绘制复杂的UML图表而烦恼吗&#xff1f;你…...