内存静态,动态分析

IOS内存泄漏动静态方法排查 标题instrument动静态分析内存泄漏等问题简单观察内存静态分析概念可排查到的问题具体的操作部分问题及解决动态分析概念具体的操作 instrument动静态分析内存泄漏等问题 大家在实际开发中,有没有遇到app异常崩溃,界面dealloc方法不调用的问题呢?很可能是由于你的app出现了内存溢出,内存泄漏的问题,今天就和大家从简入深的探讨一下怎样通过xcode自带工具解决这样的问题。 先提出两个基本概念: 1,内存溢出(out of memory):是指在运行代码时,程序的内存突然增大,使得没有足够的内存 阅读详情

内存笔记

一.内存分析
1.静态分析(Analyze)
不运行程序, 直接检测代码中是否有潜在的内存问题(不一定百分百准确, 仅仅是提供建议)
结合实际情况来分析, 是否真的有内存问题

2.动态分析(Profile == Instruments)
1> 运行程序, 通过使用app, 查看内存的分配情况(Allocations)
* 可以查看做出了某个操作后(比如点击了某个按钮\显示了某个控制器), 内存是否有暴增的情况(突然变化)

2> 运行程序, 通过使用app, 查看是否有内存泄漏(Leaks)
* 红色区域代表内存泄漏出现的地方

二.内存使用注意
1.加载小图片\使用频率比较高的图片
1> 利用imageNamed:方法加载过的图片, 永远有缓存, 这个缓存是由系统管理的, 无法通过代码销毁缓存

2.加载大图片\使用频率比较低的图片(一次性的图片, 比如版本新特性的图片)
1> 利用initWithContentsOfFile:\imageWithContentsOfFile:\imageWithData:等方法加载过的图片, 没有缓存, 只要用完了, 就会自动销毁
2> 基本上, 除imageNamed:方法以外, 其他加载图片的方式, 都没有缓存

三.2个专业术语
1.内存泄漏
1> 该释放的对象, 没有被释放(已经不再使用的对象, 没有被释放)

2.内存溢出(Out Of Memory)
1> 内存不够用了
2> 数据长度比较小的数据类型 存储了 数据长度比较大的数据

四.图片在沙盒中的存在形式
1.如果项目的Deployment Target <= 6.x (不支持图片压缩)
1> 所有图片直接暴露在沙盒的资源包(main Bundle), 不会压缩到Assets.car文件

2.如果项目的Deployment Target >= 7.x (支持图片压缩)
1> 放在Images.xcassets里面的所有图片会压缩到Assets.car文件, 不会直接暴露在沙盒的资源包(main Bundle)
2> 没有放在Images.xcassets里面的所有图片会直接暴露在沙盒的资源包(main Bundle), 不会压缩到Assets.car文件

3.总结
1> 会压缩到Assets.car文件, 没有直接暴露在沙盒的资源包(main Bundle)
* 条件 : “Deployment Target >= 7.x” 并且是 “放在Images.xcassets里面的所有图片”
* 影响 : 无法得到图片的全路径, 只能通过图片名(imageNamed:方法)来加载图片, 永远会有缓存

2> 不会压缩到Assets.car文件, 直接暴露在沙盒的资源包(main Bundle)
* 条件 : 除1> 以外的所有情况
* 影响 : 可以得到图片的全路径, 可以通过全路径(imageWithContentsOfFile:方法)来加载图片, 不会有缓存

4.结论
1> 小图片\使用频率比较高的图片
* 放在Images.xcassets里面

2> 大图片\使用频率比较低的图片(一次性的图片, 比如版本新特性的图片)
* 不要放在Images.xcassets里面

五.设备信息相关的开发(非私有API, 底层API)
1.设备的型号
2.设备的CPU型号\使用情况
3.设备的内存容量\使用情况
4.设备的硬盘容量\使用情况
5…….
6.推荐的第三方库
uidevice-extension
* 地址 : [https://github.com/erica/uidevice-extension]
* 实现思路 : 利用分类给UIDevice进行了扩展
* 使用难易度 : 非常简单

六.如何让程序尽量减少内存泄漏
1.非ARC
* Foundation对象(OC对象) : 只要方法中包含了alloc\new\copy\mutableCopy\retain等关键字, 那么这些方法产生的对象, 就必须在不再使用的时候调用1次release或者1次autorelease
* CoreFoundation对象(C对象) : 只要函数中包含了create\new\copy\retain等关键字, 那么这些方法产生的对象, 就必须在不再使用的时候调用1次CFRelease或者其他release函数

2.ARC(只自动管理OC对象, 不会自动管理C语言对象)
* CoreFoundation对象(C对象) : 只要函数中包含了create\new\copy\retain等关键字, 那么这些方法产生的对象, 就必须在不再使用的时候调用1次CFRelease或者其他release函数

3.block的注意
// block的内存默认在栈里面(系统自动管理)
void (^test)() = ^{

};
// 如果对block进行了Copy操作, block的内存会迁移到堆里面(需要通过代码管理内存)
Block_copy(test);
// 在不需要使用block的时候, 应该做1次release操作
Block_release(test);
[test release];

静态分析C程序的内存模型 代码静态分析必须可以准确地追踪不同内存对象的值,这篇论文描述了一种适用于C程序静态分析的内存模型。此模型特别适合于那些精确地路径敏感分析,例如:符号执行技术。它可以处理各种类型的C程序表达式,包括多级指针解引用,指针算数运算,复合数组和结构体类型,各种类型转换以及动态内存分配等等。它将各种左值表达式映射为不需要额外分析别名的相同对象,在 Clang static analyzer 中已经实现了这个模型,并且大大增强了精确追踪的能力。 1. 引言 在符号执行技术中,追踪单一路径中不同内存对象的值是一通用要. 阅读详情

相关推荐

iOS开发内存泄露修复

一:写在前面 请使用ARC!!! 如果使用的第三方库不支持ARC机制,可以在target->build phase->compile sources中选择对应的源码文件并在气候加入-fno-objc-arc标示,如下图所示: 如果你的应用对内存泄露比较敏感(长时间运行或者耗费较多内存),或者你对代码有洁癖无法忍受半点内存泄露,而你又没有大把的时间和精力取修复那些虚无缥缈的泄漏点,那么

lifengzhong的专栏 8218

动态内存与静态内存有何优劣?嵌入式如何选择?

在实时嵌入式系统中,由于系统软件并不像PC上复杂,一般都是很简单的内存使用,所以一般也不使用动态内存管理,但是随着RTOS面临的任务越来越重,尤其是IoT和AIoT的到来,让许多消费级产品运行的RTOS的负担越来越重。2. 创建的空间不同:堆都是动态分配的,没有静态分配的堆。2.静态内存由于是编译阶段分配好的,而动态内存是由运行中分配,这样动态内存可以被高效复用,当某段程序使用完毕后,可以将内存交换给内存池中等待下次程序的分配,由于这种机制,开发者可以利用更小的内存开发更大型的程序。

ic2121的博客 3306

Netflix Spring Boot应用内存泄漏致宕机,Java如何用“静态+动态分析“48小时定位漏洞?

你的漏洞像’地雷’:‘需要自动检测并发问题!“你的代码像’野草’:‘需要统一的编码规范!“你的规则像’模板’:‘需要自定义语法分析!“你的内存像’漏斗’:‘需要精准定位泄漏点!“你的依赖像’俄罗斯套娃’:‘需要版本控制!“你的监控像’盲人摸象’:‘需要全链路追踪!“你的JVM像’黑匣子’:‘需要实时监控!“你的方法像’黑箱’:‘需要响应时间监控!“你的线程像’交通堵塞’:‘需要并发优化!“你的死锁像’死循环’:‘需要强制分析!“你的异常像’谜题’:‘需要智能分类!“你的流程像’手工活’:‘需要自动化!

墨夶的博客 374

Static内存分析

1)定义:在一个Java类中,可以使用static关键字来修饰全员变量,该变量被称作静态变量2)访问形式:​ 类名 . 变量名​ 实例名 . 变量名3)

持续输出,励志当全栈开发人员 249

DeepSeek-R1模型+Dify实战:5步打造能读PDF的智能客服(附BGE-M3嵌入模型配置)

本文详细介绍了如何利用DeepSeek-R1大模型与Dify平台,结合BGE-M3嵌入模型,构建企业级智能文档问答系统。通过5个步骤,从环境准备到知识库构建,再到智能问答应用开发,帮助企业快速从PDF等文档中提取关键信息,提升工作效率。特别适合处理产品手册、内部规程等专业内容。

convnet3designer的博客 720

无需云服务器:飞牛云NAS+Docker搭建本地WordPress站点全球访问

在数字化浪潮中,网站搭建已成为个人和企业在推广自身品牌与业务的首要选择。飞牛云新推出的fnOS,这款集多功能于一身的nas系统,以其卓越的性能和灵活性,成为理想的本地网站部署平台。本文将带你一探如何在飞牛云NAS上通过Docker部署WordPress,并利用cpolar实现全球访问。

LT15171009269的博客 6528

MegEngine 架构系列:静态内存分析

在正式进入本文前,先通过一组简单的对比来直观地感受一下,静态内存优化带来的内存占用上的提升。分别对 1batch/128batch 的 vgg16/resnet50/mobilenetv2...

旷视开发者技术社区 447

uds协议之can总线程序升级

uds协议简介 如何利用uds协议升级 升级流程 uds服务类型介绍

fangye945a的博客 1万+

static静态方法执行--内存分析

1、static方法与非static方法区别: ● 生命周期(Lifecycle): 静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关闭。 非静态方法(Non-Static Method)又叫实例化方法,属于实例对象,实例化后才会分配内存,必须通过类的实例来引用。不会常驻内存,当...

jiaxuebingzhaojin的博客 4305

声音编程(Voice Coding) Talon(一) 基本介绍与安装使用

语音编程平台简介 语音编程工具有哪些:Talon是一款声音编程平台,它追求的意义在于完全取代键盘和鼠标。。当前,全球有两个领先的语音编程平台(Programming-By-Speech Platforms)。一是Serenade,它的作用有点像数字助手,可以让你描述正在编程的命令,而不要求你必须逐字逐句地口述每条指令。另一个就是Talon,它提供了对每一行代码更精细的控制,这也意味着你需要对每一个被编入机器的任务有更细致的把握。具体的差别可以参考文章末尾的Serenade 和 Talon编程的例子。 除了这

yinglang19941010的专栏 4139

11、Windows Autopilot 部署与设备注册全攻略

本文详细介绍了Windows Autopilot的完整部署流程,涵盖注册配置文件设置、注册状态页面(ESP)配置、设备注册方法(包括CSV导入、JSON注入、在线注册等)、自动化脚本实现及故障排除技巧。通过手动与PowerShell自动化两种方式指导用户完成配置,并提供流程图、最佳实践和常见问题解答,帮助IT管理员高效实现设备零接触部署与管理。

ii567的博客 342

Xcode 内存分析工具使用

Xcode 内存分析有静态分析和动态分析,静态分析主要是语法,会自动找出不合理的代码,提醒我们需要在某个地方优化,但是这个有的时候并不准确,该提醒的不提醒。 使用方法是 在Xcode 选择 Product ->Analyze就可以了,比如这里提示函数调用了没有初始化的变量,很多警告在编写代码的时候 就会有黄色的感叹号提示,有的时候和这里是重复的。 动态分析: 动态分析用instru

奋斗吧,少年! 1万+

RDKit | 基于Pytorch和RDKit建立QSAR模型

QSAR 定量构效方法(quantitative structure-activity relationship, QSAR)是应用最为广泛的药物设计方法。所谓定量构效方法就是通过一些数理统计方法建立其一系列化合物的生理活性或某种性质与其物理化学性质之间的定量关系,通过这些定量关系。可以预测化合物的生理活性或某些性质,指导我们设计出具有更高活性的化合物。 早在...

DrugOne 5078

软件动态分析喝静态分析_进行静态分析时,动态分析有什么用?

软件动态分析喝静态分析 Our team writes a lot about the usefulness of static analysis and the benefits it brings to your projects. We like to run our tool on various open-source projects to find possible bugs, w...

cullen2012的博客 2550

FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇四

FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇四

坚韧与专注 2161

基于ROS2 Humble和VGR数据集完整部署GADEN气体分散仿真环境及模型替换实践

文章摘要 本文详细介绍了基于ROS2 Humble和VGR数据集部署GADEN气体分散仿真环境的方法。GADEN是一款专为移动机器人嗅觉研究设计的3D仿真框架,能够精确模拟气体扩散过程并集成多种环境传感器。文章从系统配置开始,逐步指导读者完成ROS2 Humble环境的搭建、GADEN框架的编译部署,以及VGR数据集的使用。VGR数据集包含120个基于真实房屋模型的CFD仿真案例,为研究提供高度真实的测试环境。教程涵盖了常见问题的解决方案,并深入探讨了气体扩散模型参数的修改方法,为机器人嗅觉算法的开发和验证

huanghm88的专栏 276

iOS--内存分析工具

1.静态分析Analyze:不用运行程序都能分析。2.动态分析Profile: 1.内存泄漏leaks: 2.查看当前的内存分配情况Allcations:

刘海阳的博客 590

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Xcode - 内存分析

内存分析工具 1. ARC中的内存泄露 1. 一般内存分析, 主要是看看有没有内存泄露 2. 内存泄露: 创建了对象, 使用完毕没有释放, 将来就可能造成内存泄露 3. 内存泄露: 主要用于MRC的内存检测 4. 在ARC下也会有泄露的发生: 循环引用, Core Foundation 2. 静态分析工具 1. 快捷键 : shif...

weixin_30716141的博客 581

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【iOS】内存泄漏检查及原因分析

迅速膨胀的内存可以很快让程序毙命,所以要多加防范。即使有 ARC(自动引用计数)内存管理机制,但在现实中对象之间引用复杂,循环引用导致的内存泄漏仍然难以避免,所以关键时刻还要自力更生。分析内存泄露不能把所有的内存泄露查出来,有的内存泄露是在运行时,用户操作时才产生的。 开启了ARC并不是就不会存在内存问题,苹果有句名言:ARC is only for NSObject。 使用ARC的项目,一般内存泄漏都是 malloc、自定义结构、资源引起的,多注意这些地方进行分析。

XY_Mckevince的博客 3938

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

iOS性能优化-内存检测

1.静态分析 command + SHIFT + B 也可以进入静态分析。Xcode 静态分析能发现的问题主要有: (1)逻辑缺陷,例如访问未初始化的变量或空指针的解引用; (2)内存管理缺陷,如内存泄露; (3)无用存储缺陷(永不会被访问的变量); (4)因未遵从项目用到的框架(frameworks)或类库(libraries)所规范的而导致的API使用缺陷;通过 Xcode Analyze 发...

划落永恒的博客 476

性能测试--性能分析--内存分析

静态分析检测代码是否有潜在的内存泄漏 编译器觉得不太合适的代码 使用工具:Analyze 动态分析检测程序在运行过程中的内存变化 使用工具:Profile Allocations:能看清楚app的内存分配情况 看清楚app在何时产生了内存泄漏 内存泄漏:该释放的对象没有被释放。 内存溢出:内存不够用

赵不懂的博客 1589

4.6 x64dbg 内存扫描与查壳实现

LyScript 插件中默认提供了多种内存特征扫描函数,每一种扫描函数用法各不相同,在使用扫描函数时应首先搞清楚不同函数之间的差异,本章内容将分别详细介绍每一种内存扫描函数是如何灵活运用,并实现一种内存查壳脚本,可快速定位目标程序加了什么壳以及寻找被加壳程序的入口点。软件查壳的实现原理可以分为静态分析和动态分析两种方式。静态分析是指在不运行被加壳程序的情况下,通过对程序的二进制代码进行解析,识别出程序是否被加壳,以及加壳的种类和方法。动态分析是指通过运行被加壳程序,并观察程序运行时的行为,识别程序是否被加壳

微软技术分享 6248

代码质量保障:awesome-ciandcd 静态检查与动态分析工具详解

在现代软件开发中,持续集成和持续交付(CI/CD)已成为提升效率和质量的关键实践。awesome-ciandcd 作为一个专注于 CI/CD 的开源项目,汇集了众多优质工具,其中静态检查与动态分析工具更是保障代码质量的核心组件。本文将详细介绍这些工具的功能、应用场景及使用方法,帮助开发团队构建更健壮的代码质量保障体系。 ## 为什么代码质量保障至关重要? 代码质量是软件项目成功的基石。低质量的

gitblog_00943的博客 506

[Linux]cppcheck静态检查代码和valgrind内存泄露动态检查

cppcheck是一个静态代码分析工具,它可以在不运行程序的情况下检查C/C++源代码。Valgrind则是一个动态分析工具,擅长检测内存管理问题,如内存泄漏、访问已释放的内存、不正确的使用malloc/free等。

zzzlearning的博客 1396

iOS学习——内存泄漏检查及原因分析

  项目的代码很多,前两天老大突然跟我说项目中某一个ViewController的dealloc()方法没有被调用,存在内存泄漏问题,需要排查原因,解决内存泄漏问题。由于刚加入项目组不久,对出问题的模块的代码还不太熟悉,所以刚拿到问题时觉得很棘手,再加上作为一个iOS菜鸟,对内存泄漏的排查方法和原因确实基本上不了解。所以,也借着这样的机会,我研究了一下关于iOS开发中内存泄漏的排查方法和...

weixin_30629653的博客 180

iOS内存分析总结

一.内存分析 1.静态分析(Analyze) 不运行程序, 直接检测代码中是否有潜在的内存问题(不一定百分百准确, 仅仅是提供建议) 结合实际情况来分析, 是否真的有内存问题 2.动态分析(Profile == Instruments) 1> 运行程序, 通过使用app, 查看内存的分配情况(Allocations) * 可以查看做出了某个操作后(比如点击了某个按钮\显示了某个

阿明 319
上一篇: const,static,extern区别与开发使用场景
下一篇: Autolayout 自动布局
XR_Code
博客等级 码龄10年 16粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值