IOS内存管理知识总结(一)

OsgEarth实战:飞机模型动态轨迹与雷达扫描效果实现详解 本文详细介绍了如何使用OsgEarth实现飞机模型动态轨迹与雷达扫描效果。通过实战案例,讲解了模型加载、路径规划、动态轨迹绘制、飞行姿态计算以及雷达扫描效果的实现方法,并提供了性能优化技巧,帮助开发者高效完成三维可视化项目开发。 阅读详情

    最近优化公司在优化app,总结几个内存管理的知识点。

    首先我们要清楚

    1. “堆”和“栈”

Objective-C的对象在内存中是以堆的方式分配空间的,并且堆内存是由你释放的,就是release
OC对象存放于堆里面(堆内存要程序员手动回收)
非OC对象一般放在栈里面(栈内存会被系统自动回收)
堆里面的内存是动态分配的,所以也就需要程序员手动的去添加内存、回收内存

按管理方式分
  • 对于栈来讲,是由系统编译器自动管理,不需要程序员手动管理
  • 对于堆来讲,释放工作由程序员手动管理,不及时回收容易产生内存泄露
按分配方式分
  • 堆是动态分配和回收内存的,没有静态分配的堆
  • 栈有两种分配方式:静态分配和动态分配
    • 静态分配是系统编译器完成的,比如局部变量的分配
    • 动态分配是有alloc函数进行分配的,但是栈的动态分配和堆是不同的,它的动态分配也由系统编译器进行释放,不需要程序员手动管理

    2. 单例模式

    单例模式是限制一个类只能初始化一个对象的一种设计模式,在实践中,初始化通常在程序启动不久后执行,而且这些对象不会销毁,原理想必大家都很清楚,单例对象被一个全局的静态变量所引用,保证了他不会被释放,每次调用都会先进行判断是否已经创建,一旦创建将不会再次创建

    正是因为单例的不会被释放,才有可能造成内存风险并且会增加程序的启动时间。下面是列举开发中的主要使用场景

  •     队列操作(如日志和埋点)
  •     访问共享资源(如缓存)
  •     资源池(线程池)

    所以在使用单例时候应该基本遵循一下原则:

  •     尽量不使用单例
  •     尽量避免对象级属性,尽量使用本地变量

    3 依赖注入

依赖注入的本质是在需要的时候传递依赖,我们可以先看下下面的例子

   -   (void)someMethod{   //外部类的方法

        XXSomeClass *obj = [XXSomeClass shareInstance];  //单例对象

        NSString *someValue = [obj operation:@"some parameter"];

    }   

很明显的发现 someMethod依赖了外部的类XXSomeClass,

  • 如果XXSomeClass在operation方法中又持有了一些资源,那么他会一直持有,哪怕shareInstance不会被调用。
  • 如果XXSomeClass需要在someMethod完成某些初始化,而上游调用someMethod的方法并不知道而直接使用XXSomeClass,会造成XXSomeClass并未初始化

这时候就需要依赖注入了,依赖注入可以通过自定义的初始化器或者调用方法注入。代码如下:

-(instancetype)initWithSomeClass:(XXSomeClass *) someClass{

        if(self=[super init]){

            self.someClass = someClass;

        }

        return self;

    }

-(void)someMethod{

    NSString *someValue = [self.someClass operaion:@"some parameter"];

}

-(void)anotherMethodWithAnotherClass:(anotherClass*) anotherClass{

       NSString *someValue = [anotherClass operaion:@"some parameter"];

}

欢迎大家讨论一个问题,方法在对象中如何存储,调用过程时如果对方法以及方法中的局部变量进行管理?


Windows 10/11一键搞定HDF5文件查看:HDFView 3.4.1免配置安装指南(附中文路径避坑技巧) 本文详细介绍了HDFView 3.4.1在Windows 10/11上的免配置安装方法及中文路径优化技巧。作为HDF5文件查看的专业工具,HDFView 3.4.1简化了安装流程,提升了科研数据处理效率,特别适合遥感、气象等领域的研究人员使用。 阅读详情

相关推荐

别再只看K线了!聊聊“板块联动”和“热点轮动”的跟踪方法与工具(实战派分享)

本文深入解析了如何通过板块联动和热点轮动构建高效交易系统。从三维验证框架到主流工具配置,再到持续性热点的五大特征,实战派交易员分享了识别市场主线和预判轮动方向的高阶技巧,帮助投资者摆脱单纯依赖K线的局限,提升交易决策效率。

weixin_29281941的博客 756

IOS内存管理

1. 栈区(stack):由编译器自动分配释放,函数的参数值,局部变量等值。2. 堆区(heap):一般由开发人员分配释放,若不释放,则可能会引起内存泄漏。Objective-C提供了两种种内存管理方式:(MRC,手动引用计数器),(ARC,自动引用计数)。ARC作为苹果新提供的技术,苹果推荐开发者使用ARC技术来管理内存;

风·之痕的博客 8482

3D模型文件格式全解析:从STL到glTF,10种主流格式与转换实战指南

在三维数字内容创作与工程制造领域,3D模型文件格式是数据交换与协作的基石。其核心原理在于以不同的数据结构(如三角网格、NURBS曲面、边界表示等)对三维物体的几何、外观及场景信息进行编码。理解这些格式的技术特性,对于保障数据完整性、提升工作流效率具有关键价值,广泛应用于3D打印、游戏开发、影视动画及工业设计等场景。例如,面向增材制造的STL格式以其极简的三角面片结构成为行业通用语,而支持丰富材质与动画的FBX格式则在影视游戏管线中扮演核心角色。本文聚焦于STL、OBJ、FBX、3MF、STEP等10种主流格

weixin_28520495的博客 353

iOS内存管理

IOS内存管理IOS内存管理管理原则1. 非ARC模式,MRR(manual retain-release)2. ARC模式循环引用问题内存管理注意事项常见的内存管理问题 IOS内存管理 iOS需要开发者管理内存,很高高级语言都有垃圾回收机制,但iOS开发却没有垃圾回收机制。虽然iOS没有垃圾回收机制,但是mac OS有垃圾回收机制。iOS将内存管理的任务交给了开发者。 管理原则 OC中的内存...

kyl282889543的博客 711

STM32F103+AX58100 EtherCAT从站SPI移植实战:CubeMX配置避坑指南

本文详细介绍了STM32F103与AX58100 EtherCAT从站控制器的SPI接口移植实战,重点解析CubeMX配置中的关键参数与常见陷阱。内容涵盖硬件连接规范、SPI模式设置、中断优先级规划及协议栈对接技巧,帮助开发者高效实现工业自动化领域的实时通信方案。特别强调CPOL/CPHA配置与AX58100的匹配要求,避免数据错位问题。

weixin_29230865的博客 330

告别蓝牙音质妥协:用ESP32和PCM5102搭建WiFi无损音频播放器(附完整代码)

本文详细介绍了如何利用ESP32微控制器和PCM5102 DAC芯片构建一套完整的WiFi无损音频流媒体系统,彻底摆脱蓝牙协议的音质束缚。从硬件原理到软件实现,包括核心器件选型、电路设计、I2S音频驱动实现以及系统优化方案,帮助音频发烧友实现高保真无线音频传输。

weixin_30733003的博客 541

你一定要知道的iOS 内存管理|干货满满

iPhone 作为一个移动设备,其计算和内存资源通常是非常有限的,而许多用户对应用的性能却很敏感,卡顿、应用回到前台丢失状态、甚至 OOM 闪退,这就给了 iOS 工程师一个很大的挑战。 网上的绝大多数关于 iOS 内存管理的文章,大多是围绕 ARC/MRC、循环引用的原理或者是如何找寻内存泄漏来展开的,而这些内容更准确的说应该是 ObjC 或者 Swift 的内存管理,是语言层面带来的特性,而不是操作系统本身的内存管理。 如果我们需要聊聊”管理“内存,那么就需要先了解一些基础知识。 内存基础概念复习 物理

a1661408343的博客 2346

09、Flutter FFI Dart Native API

本文介绍了 Dart Native API 的基本用法,解决了 Dart 与 C 异步通讯的问题

eieihihi的专栏 4396

IOS内存管理总结

IOS内存管理总结 理解 iOS 的内存管理 唐巧 http://blog.devtang.com/2016/07/30/ios-memory-management/ 摘要 引用计数 循环引用 弱引用 Instruments工具监测动态内存泄漏 https://www.jianshu.com/p/c0aa12d91f05 Analyze工具检测静态内存泄漏 https://www.jia...

luciozhang的博客 682

十.镜头知识之畸变问题

对于理想光学系统,在一对共轭的物像平面上,像的放大率是一个常数。但是对于实际的光学系统,当视场较大或很大时,像的放大率就要随视场而异,这样就会使像相对于物体失去相似性。这种使像变形的成像缺陷称为畸变。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 2122

生成对抗网络(GAN)在数据增强中的应用【附核心实战代码】

生成对抗网络(GAN)由Ian Goodfellow等人在2014年提出。它包含两个主要的部分:生成器(Generator)和判别器(Discriminator)。生成器负责生成假数据,而判别器则用于区分输入的数据是真实的还是由生成器生成的。通过这种对抗过程,生成器不断优化自己,生成越来越真实的样本。最终,生成器生成的样本几乎无法被判别器区分与真实数据。

一键难忘的博客 3119

iOS底层原理探究- NSObject 所占内存

iOS底层原理探究- NSObject 所占内存 面向对象的Objective-C 我们平时写的 OC 代码底层实现为 C/C++ 代码,因为 Runtime 让 OC 具备了面向对象的特点,而后底层的 C/C++ 会转换成底层的 汇编 代码,最终被被解析成计算机能识别的 机器语言 。而 OC 中的类,正是正是基于 C/C++ 的结构体实现的。我们可以通过 clang 命令将我们平时所写的 ...

weixin_34174322的博客 288

【嵌入式DIY实例ESP32篇】-步数计数器

在本项目中,我们将使用 ESP32 微控制器和博世的 BMI160 加速度计陀螺仪模块构建一款便携式计步器

视觉与物联智能 801

iOS 内存管理(一)之基础知识介绍

1,什么是引用计数 所有OC对象都有一个计数器,叫做引用计数,引用计数就是目前有几个对象在使用该对象(持有该对象的引用); 2,什么是对象所有权 A对象拥有B对象的引用,A对象拥有B对象的所有权; 3,什么情况下需要retain A对象的拥有者又增加了一个,那么A对象的拥有计数加1,此时需要使用retain(就是当其他对象需要该对象时,即其他的指针指向了该对象,那么就使该对象的引用计数加...

weixin_30293079的博客 105

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

小红书校招iOS笔试题考点解析:从内存管理到性能优化

在iOS开发中,内存管理与多线程是构建稳定应用的两大基石。理解ARC底层机制、Block循环引用、GCD队列与RunLoop事件循环,不仅有助于深入掌握系统运行原理,更是排查卡顿、优化启动性能的关键能力。这些基础技术广泛应用于日常工程实践:从避免循环引用引发的内存泄漏,到通过dispatch_group管理并发任务,再到分析NSTimer在滑动时失准的根本原因,都需要开发者具备扎实的原理认知。对于准备秋招的应届生而言,一份系统梳理核心考点的笔试真题解析,往往比盲目刷题更能高效搭建知识体系。以小红书2020校

weixin_34314962的博客 419

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

iOS基础面试题(一)

kaikaijia同学私信我,说想加群,我就建个iOS开发群,大家做技术交流和资源,群号:241048287,有兴趣的同学可以加群,验证信息:iOS+姓名。 iOS面试题系列: iOS面试题(二) iOS面试题(三) iOS面试题(四) 随着iOS平台开发的职位的增加,笔试、面试也越来越有“套路”,这里我总结了一些面试题,多数是Objective-C的基础知识,适

寻亚楠的专栏 21万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

iOS内存管理的知识梳理

从作用上来说,手机内存小,划分给每个App的内存有限,合理的进行内存管理,有利于提高软件的运行性能和用户体验; 另外,内存管理是一大理论知识块,对这块知识的理解程度也是考核面试者的重要标准。 内存管理,给稍微有些经验的开发者的感觉就是既无处不在,但是又没在内存管理上没花过心思。 说它无处不在,那是因为从你定义一个属性开始、从你实例化一个对象开始,内存管理就已经起作用了。 说...

CCCCCC1990的博客 377

【iOS开发】—— iOS内存管理

iOS内存管理

weixin_50990189的博客 3572

iOS内存管理相关知识笔记

iOS内存管理相关知识笔记 使用CADisplayLink、NSTimer有什么注意点? CADisplayLink、NSTimer会对target产生强引用,如果target又对它们产生强引用,那么就会引发循环引用 [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(task) userInfo:n...

WJ的博客 407

iOS高级理论:内存管理

在 iOS 应用开发中,内存管理是非常重要的一个方面,合理管理内存可以避免内存泄漏和内存过度消耗,提高应用的性能和稳定性。iOS 中的内存管理主要是通过引用计数(reference counting)和自动释放池(autorelease pool)来实现的。

长沙火山 1806

IOS 基础知识 - 内存管理

IOS 基础知识 - 内存管理内存管理原则本小节知识点:1.内存管理原则2.多对象内存管理3.set方法内存管理4.dealloc方法的内存管理野指针\空指针本小节知识点:1.僵尸对象2.野指针3.空指针引用计数器本小节知识点:1.什么是引用计数器2.引用计数器的作用3.引用计数器的操作@property参数本小节知识点:1.控制set方法的内存管理2.控制需不需要生成set方法3.多线程管理4....

kyl282889543的博客 275

ios+android+内存管理,iOS 内存管理(一)

前言iOS开发中,内存管理是从来都不能忽视的问题,OC采用的是动态内存管理方式,跟踪每个对象被引用的次数,当对象引用次数为0时,则释放对象占用的内存。引用计数分为自动和手动计数(retain 引用、release释放,autorelease 废弃),在此我主要对自动引用计数做相关的分享。自动引用计数自动引用计数顾名思义是自动计数管理,是编译器在编译过程中自动添加retain、release来确保对...

weixin_39819138的博客 322

iOS中内存管理方案

系统提供的有不同的内存管理方案,大致有如下三种: TaggedPointer(对于一些小对象,比如说NSNumber,NSString等采用此种方案) NONPOINTER_ISA(64位架构下iOS应用程序) 散列表(散列表为复杂的数据结构,包含了引用计数表和弱引用表) TaggedPointer 以下2段代码能发生什么事?有什么区别? - (void)setName:...

小菜媛的博客 2736

『iOS开发』 —— iOS内存管理

iOS内存管理 引用计数(Reference Count) iOS的内存管理基于引用计数这一机制,简单地说就是一个对象被其他对象持有时,引用计数+1,当不再被持有时-1,当引用计数减为零的时候对象不被任何人持有,就会被释放。 #### 内存管理的思考方式 * 自己生成的对象自己持有   `id obj = [[NSObject alloc] init];` * 不是自己生成的对象自己也能持有...

Peter_Huang0623的博客 799

iOS开发之内存管理

iOS开发之内存管理 一、垃圾回收机制 二、内存管理的概念 三、OC内存管理注意事项 四、MRC相关语法 一、垃圾回收机制 与Java语言相同Objective-c 2.0之后,也提供了垃圾回收机制。OC是支持垃圾回收机制的(Garbage collection简称GC),macOS开发中是支持的。但是在iOS移动终端设备中,并不支持垃圾回收机制。因此,iPhone并不能对内存进行自动垃圾

逝水无情的博客 1469
上一篇: iOS开发篇 - 如何好性能给UIImage绘制成圆角图片
下一篇: 浅谈CSS3中display属性的Flex布局
小桃酥
博客等级 码龄10年 23粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值