XCode 代码优化及性能检测的一些小方面

这只是自己学习的一些记录罢了,希望不要对大家的理解产生什么错误的指引才好,有什么错误也希望大家能够支出,谢谢。

本次文章参照的一些文档

Xcode 调试方法总结

XCODE DEBUG 技巧

Instruments性能检测

具体的一些方式方法自己看文档,这里只是介绍了本次解决问题所使用到的一些方法。

主要目的是为了解决程序卡的问题,使用到的放入如下:

1. 全局断点(Global BreakPoint)

我觉得这一点还蛮重要的,之前有时调试奔溃了直接跑到main方法里面或者直接就是代码地址块完全看不懂,找bug要找很久。

1-1

你就建立个全局断点,这样只要遇到错误,debug程序就会自动定位出错的代码的那一行了。

2.  Static Analyzer (静态分析)

Static Analyzer主要用于分析内存,避免内存泄漏。

主要针对未使用的实例变量、未初始化的实例变量、类型不兼容、无法达到的路径、引用空指针 。

就类似这样的代码

NSMutableDictionary *param = [NSMutableDictionary dictionary];

    param = [sender.customModel mutableCopy];

改正为

NSMutableDictionary *param = [sender.customModel mutableCopy];

可以纠正一下不太准确的写法。

2-1

使用:command + shift +B,就能找到存在问题的地方,进行改造(ps:当然库的问题就不用管了)。也不是所有地方都要改的,还需要进行测试。根据具体环境具体修改。可以经常性用来校验代码的一个方式。

使用内存管理器遇到的问题大概分为:

1、garbage value(垃圾值)

2、never read(分配了空闲内存)

3、Null passed to a callee that requires a non-null 1st parameter(Null赋值给非空对象)

4、Potential leak of an object stored into 'XX'(存在潜在的内存泄露)

3. Instruments性能检测

暂时使用到的是Time Profiler。用来分析程序在那一部分耗时更多的问题。

3-1

原来的在右侧的功能盘在xcode10里面已经变成点击显示了(我也不知道xcode几改的)。

勾选了Separate by Thread(按照线程分割),Invert Call Tree(不很理解文档那么说我就那么做了,选没选好像没差),Hide System Libraries(隐藏系统库)

3-2

然后选择比较耗时的线程,点击之后右侧出现类似图3-2的界面。

双击会跳到具体的代码块,如图3-3。可以点击右上角那个xcode标志跳到代码相应位置进行编辑

3-3

例如上图,你对nsstring进行了 stringByAppendingString操作,函数会返回的是一个新的对象,太多的stringByAppendingString调用会引起性能问题,因为内存分配是很消耗资源的,我们应该尽量避免。

4. Color Blended Layers

字面意思:颜色混合层

4-1

参考文章:UILabel在iOS8下的Color Blended Layers

红色:表示这些layer是透明的,系统在渲染这些像素点的时候,需要将该view及view一下的其他view混合之后才能得到实际的颜色。红色越深,表明系统在渲染的时候越费劲。

绿色:表示这些layer是不透明的,易于渲染。

黄色:表示这里的点无法直接绘制在屏幕上,此时系统需要对相邻的像素点做反锯齿计算,增加了图形负担。产生的原因是这个控件的背景是通过图片拉伸得到的。

所以推荐尽可能地使用不透明的图层。

首当其冲的就是透明度问题,图层透明时,ios需要计算混合图层的颜色,增加计算量。

4-2

在iOS8以前,UILabel使用的是CALayer作为底图层,而在iOS8开始,UILabel的底图层变成了_UILabelLayer,绘制文本也有所改变,就像上图所视。

通过设置图层的masksToBounds为YES时,图层将会沿着Bounds进行裁剪。

lable.layer.masksToBounds = YES;

还有UIImgaeView的image含有Alpha channel(即使UIImageView的alpha是1,但只要image含透明通道,则仍会导致Blending),暂时还没搞明白。

关于优化UIImage的问题?

反正有点没搞明白,还有imageNamed和imageWithContentsOfFile到底应该怎么选择?

网上看到两种说法

说法1

imageNamed

    1.系统缓存有这个图片,直接从缓存中取得

    2.系统缓存没有这个图片,通过传入的文件名对整个工程进行遍历 (在application bundle的顶层文件夹寻找名字的图象 ), 如果如果找到对应的图片 , iOS 系统首先要做的是将这个图片放到系统缓存中去,以备下次使用的时候直接从系统缓存中取 , 接下来重复第一步,即直接从缓存中取

    但是相对的image数量级偏大,容易导致内存飙高,崩溃。适用于图片小,使用非常频繁的情况例如cell.

imageWithContentsOfFile

    图像数据不会被缓存 ,用于图片大的情况,节约内存。

说法2

imageNamed多次读取缓存,需要进行多次copy,性能消耗非常大。我也忘了我是哪里找到的了,不知道是不是记岔。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容