用Xcode Analyze进行代码静态检查以及一些常见问题释疑

本文详细介绍了如何使用Xcode Analyze进行代码静态检查,包括内存泄漏监测、无效数据监测和逻辑错误监测。同时,解释了Debug和Release版本的区别,Analyze在开发流程中的作用,以及Profile的性能分析功能。通过实例展示了Analyze如何帮助找出并解决潜在问题,提升代码质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Xcode是一个非常强大的IDE,最近使用Xcode Analyze对代码进行代码静态检查,尝到了不少甜头。


在Xcode中提供了两种工具帮助查找泄漏点:Analyze和Profile,Analyze是静态分析工具可以通过菜单 Product→Analyze启动,为静态分析之后的代码画面;Profile是动态分析工具,这个工具叫“Instruments”,它是Xcode 集成在一起,可以在Xcode中通过菜单Product→Profile启动,Instruments有很多Trace Template(跟踪模板)可以动态分析和跟踪内存、CPU和文件系统。这里先介绍静态检查代码:


一、静态检查代码

运行Xcode Analyze方法   

Product---->Analyze

1、可能存在的内存泄漏监测(Memory)

运行Analyze后,查看一处Memory警告,可以看到如下代码:Potential leak of an object。

注意上面的代码并不是L63行存在泄漏,我们点击“Potential leak of an object”前面的箭头,指示会出现一些变化,如下图。

->1. Method returns an Objective-C object with a +1 retain count

alloc一个对象的时候,其内存计数(retain count)+1,

  1. [[NSMutableString alloc] init]  

->2.Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1

因为content的setter方法会将object的内存计数+1,如下代码,content是retain属性。执行完L62代码后,self.content的内存计数就为 2

  1. @property (nonatomic, retain)   NSMutableString* content;         


建议修改方案:

[plain]  view plain copy print ?
  1. self.content = [[[NSMutableString alloc] init] autorelease];  


2、无效数据监测(Dead store)

无效数据如:Unused、Never read....这个比较简单,就不贴代码了!

3、逻辑错误监测(Logic error)

如上代码,当Tag不等于1、2和3的时候,就会出现很问题了。len is a garbage value。建议在声明变量时,同时进行初始化。


目前笔者在使用Xcode Analyze时,只发现了以上3钟错误,后面如有新的发现,再添加上!



二、常见问题释疑

1,Debug和Release版本区别?

众所周知,我们进行iOS开发,在Xcode调试程序时,分为两种方式,DebugRelease,在Target的Setting中相信大家应该看到很多选项都分为DebugRelease,方便我们分别设置,满足调试和发布的不同需求。

Release是发行版本,比Debug版本有一些优化,文件比Debug文件小 Debug是调试版本,Debug和Release调用两个不同的底层库。通俗点讲,我们开发者自己内部真机或模拟器调试时,使用Debug模式就好,等到想要发布时,也就是说需要大众客户使用时,需要build Release版本,具体区别如下:

一、Debug是调试版本,包括的程序信息更多
二、只有Debug版的程序才能设置断点、单步执行、使用TRACE/ASSERT等调试输出语句
三、Release不包含任何调试信息,所以体积小、运行速度快


那么,问题来了,我们调试程序时,该如何生成(Build)或运行Debug或是Release版本呢?

Xcode左上角,点中项目名称-Edit Scheme,或是菜单栏-Product-Scheme-Edit Scheme 弹出界面如下:


当你这里设置Debug时,你build/Run后就是debug版本,相应的,修改成Release模式,出来的就是release版本,这里可以很方便切换。


2,Analyze的作用?

刚开发时,始终不知道这个的作用,只知道要打包生成APP时,需要用这个,那么到底Analyze和Release有什么关系呢?


archive是你要上传包的时候,打包。也就是说Archive只跟APP要上传到appStore的时候有关,一般情况下,只有在那个时候才会用Archive,可以这么理解。所以Archive也分为Debug和Release两个,你可以Archive出一个Debug版本的应用也可以Archive出一个Release的应用。


所以说,Archive和Release没有太大的关系,Archive我们平时一般都不会用到的。


3,Profile


点击运行Profile,profile 之后,会有一个工具选项. 然后你可以查看app 性能


4,Analyze

analyze,是查找静态内存泄漏,以前mrc 的时候会用。Profile和Analyze都可以在Scheme中设置:


【后续补充】




总结:

默认run,是debug模式,就是真机联调.
如果你修改为release,是run 的时候, 为发布模式.
直接archive 是系统提供帮助打包的,Archive生成后的文件会小很多~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值