内存静态,动态分析

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

STM32读取BQ40Z50的数据

TI电池管理芯片BQ40Z50,通信协议是SMBUS,类似IIC,速率要求10-100KHz   用的STM32F103的硬件IIC读取电池的各种数值,源代码如下: ​ #include "iic.h" #include "stdio.h"  //***************************************************** // IIC2初始化函数:初始化ST...

百步登峰的博客 1万+

零基础学simulink仿真建模--基于Simulink进行农业机械用开关磁阻电机的仿真建模

特点结构简单:无电刷、换向器等易损件,维护成本低。坚固耐用:适合恶劣的工作环境,如农业机械作业现场。宽调速范围:通过适当的控制策略可以实现较宽的速度调节范围。挑战非线性特性:SRM的电磁特性和转矩特性具有高度非线性。复杂性:涉及电气、机械动力学以及控制系统的设计与集成。实时性要求:需要快速响应以适应不断变化的操作条件。多变量优化:包括电流控制、速度控制等多个方面需综合考虑。使用Simscape Electrical库来构建一个开关磁阻电机模型。

amy_mhd的博客 909

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

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

旷视开发者技术社区 447

Linux平台CCS安装配置完整示例

手把手讲解在Linux系统中完成CCS安装与环境配置的全过程,涵盖关键步骤与常见问题解决,是查找ccs安装教程时不可多得的实战指南。

weixin_42601134的博客 514

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

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

jiaxuebingzhaojin的博客 4305

STK之Commu模块之三仿真卫星通信链路参数计算

考虑上述衰减的影响,可以得到卫星接收机输入端的载波功 [C] = [PT] +[GT] +[GR] -[L] -[L1] -[L2] (

juanhuokang2681的博客 8267

保姆级教程:手把手教你为裕泰微YT8521 PHY芯片编写Linux设备树(DTS)节点与驱动

本文提供了一份详细的保姆级教程,手把手教你为裕泰微YT8521 PHY芯片编写Linux设备树(DTS)节点与驱动。从基础配置到RGMII接口的特殊设置,再到驱动开发的关键步骤和调试技巧,帮助开发者快速掌握PHY芯片的移植与开发。

weixin_33734785的博客 333

Xcode 内存分析工具使用

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

奋斗吧,少年! 1万+

fatal: unable to access ‘https://github.com/xxx.git/‘ OpenSSL SSL_connect: SSL_ERROR_SYSCALL 解决方案

 本文主要介绍了fatal: unable to access ‘https://github.com/xxx.git/’: OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443解决方案,希望能对使用git的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 24万+

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

软件动态分析喝静态分析 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

【C++/嵌入式梳理】bootloader

【C++/嵌入式笔试面试八股】bootloader

Hi 1210

SOME/IP协议详解「总目录」

SOME/IP系列文章总目录

雪云飞星的博客 2万+

iOS--内存分析工具

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

刘海阳的博客 590

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Xcode - 内存分析

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

weixin_30716141的博客 581

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

XY_Mckevince的博客 3938

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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、付费专栏及课程。

余额充值