美文网首页
内存检测( Build And

内存检测( Build And

作者: Hunter琼 | 来源:发表于2017-07-19 15:36 被阅读88次

          作为一个半路出家的移动开发者来说,就我个人而言对于内存非常陌生的.一个在ARC环境下开发的孩纸来说,一味的追求效率,往往忽略了我们代码的耦合性,对内存的影响等等.最近公司需要更新客户端,问题来了ios客户端内存问题有么有了?答案是肯定的。

           在检测内存之前,我们需要知道ios内存检测工具,常见的有:Instruments的Leaks、Build And Analyze、Memory Graph、MLeaksFinder等。

          Build And Analyze:这种检测方法操作比较简单:只需要打开项目工程,选择Product→Analyze 或者快捷键command +  shift + B 即可。检测一会儿就会出现如下图一:

    图一

    这种分析内存的方法,速度快,不运行代码,分析代码的结构,我们在项目上线前可以简单的处理代码问题

            1 Dead Stroe:代码书写问题,一般会报错如下警告

            Value stored to 'xxx' during its initialization is never read(字面理解是初始化对象xxx无法在程序读取) 这个警告出现的原因有好多情况:如初始化了对象,但是没有使用,对象没有初始化,就开始使用 初始化了两次等等

    图示二 图示三 图示四

             解决办法: 对于图示二 图示三 这类问题,一直存在工程中,宝宝也是大吃一惊,后来才知,工程维护的人多,哈哈哈 这就没办法了  图示四:是我常犯的错误,结构体或者对象没有初始化(startPt) ,就开始使用了;修改如下 CGPoint startPt = CGPointZero 

    2 Core Foundction/Obeject-C

           这个问题,很容易被开发者忽略,没有遵循oc语音的特性,就随性上代码,也是笔者所犯的错误,废话少说,有图有证据!

    图2-1

            OC所写的代码都是基本是继承与NSObject 的,所以有时候需要用super 去调用父类的方法,只有父类知道怎么去执行,子类要想实现 必须先调用父类的方法!  血泪啊 !

    3 Apple Misuse(Apple)

           这类问题,是非常危险的!笔者的理解是,就是潜在的死循环的始作俑者,一旦上线崩溃,脸上会挂不住的!比如:

    图3-1b

    不可变字典对象(dict)value值不能为空,如果在某种情况下value = nil,程序直接崩溃,修复方式有两种方式:

    第一种: 将快速定义不可变字典的({})方式改为:可变字典处理即可.

    第二种:利用异常处理(Java中用比较多)方式,如下:

    @try {

    <#Code that can potentially throw an exception#>

    } @catch (NSException *exception) {

    <#Handle an exception thrown in the @try block#>

    } @finally {

    <#Code that gets executed whether or not an exception is thrown#>;

    @try {

    //插码需求,我的设置

    NSDictionary *dict = @{@"WT.mobile":[UserLoginHelper sha

    redInstance].userId,

    @"WT.es":@"我的移动",

    @"WT.event":item.title};

    [WebtrendHelper sendEventWithActionAtPath:@"/wdyd" Description:@"wdyd" eventType:@"click" setCustomParameters:dict];

    } @catch (NSException *exception) {

    // 异常处理

    } @finally {

    }

    4 Memory(Core Foundction/Obeject-C)

            通常会有这样的警告:potential leak of an object stored into XXX 意思是潜在的内存泄露,我们有时候用某个客户端,忽然之间消失了,打开又好了,笔者所遇到项目中,就有这类问题,测试发现,这类问题大多数是内存泄露引起的,不过因笔者的水平有限,单单用Build And Analyze分析是无法找到这些问题病根的;所写的代码在32位的操作系统上有卡死不动情况,真是蛋疼的节奏!不知道如何解决这些问题,望大神多多指教。

    4-1

          图示4-1 是获取通讯录信息代码,addressBook出现了潜在的内存泄露,测试发现少量手机会崩溃,仔细检查代码发现如图(4-2);

    4-2

    修改如下即可:

    4-3

    5 Memory Error

       在内存检测中遇到了这样的警告"Use of zero-allocationed memory",不是很理解,图示如下:(是个地图导航类.mm文件中出现的)

    5-1

          结束语: 内存问题一直存在与我们身边,只要写一行代码,内存读取过程中,都会有潜在的危险,就笔者而言,撸码还要很长路要走,希望和各位同行多多交流。望各位老司机给菜鸟留下宝贵的意见!!!

    相关文章

      网友评论

          本文标题: 内存检测( Build And

          本文链接:https://www.haomeiwen.com/subject/tauuittx.html