13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

对待棘手bug,新手与大牛的差距在哪里?

问题描述:

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、网络空间、营销软件、网站建设、钟楼网站维护、网站推广。

内存对比:

在沐浴更衣焚香、杀进程、清缓存后,分别拉取相邻的812版本代码和816版本代码分别编译,得到结论:

吐槽:

  1. 如果代码乱申请内存,那么内存爆掉的应该是模拟器或真机。而不该是Xcode
  2. 如果当前版本新增10w行代码(其实不到),对总代码量增长不超10%,Xcode内存怎么可能翻两翻。

但是不管是谁的锅,肯定是代码或者配置触发的,分析还要继续。

分析方法选择:

  1. 找代码:通过二分法,编译不同日期的版本,找到引发问题的那次提交,确定是哪个改动引起
  2. 找内存:分析增大的内存是什么,根据增大的内容分析问题出在哪。

分析步骤:

我在run的时候发现:

关闭Xcode后再打开,此时Xcode并没有run,所以推测他在做一件事:读缓存

缓存文件:

.o文件:二进制对象文件,不多说

.d文件:文本文件,记录该类依赖的所有文件路径

.dia文件:未知二进制文件,但是变大的就是它

我的吐槽又来了:

继续分析:

那具体是什么导致的warning呢,面对几千个.dia文件,我内心是崩溃的。

问题虽解,但是遗留2个问题:

  1. 怎么就提交了107个warning?
  2. 区区107个warning。为啥会导致内存飙升?我们还剩几百个warning为啥没问题?

问题1:

自Xcode6起提供的新功能,可以申明一个函数的参数是必传的(nonnull)还是可选的(nullable) ,这会让代码更严谨,我们是推荐使用的

兼容老代码:整个头文件都没有nonnull/nullable申明的,编译没毛病

对新代码高要求:只要给代码中添加了一个nonnull/nullable,剩余的代码也必须添加,否则其他每个接口就会有warning

问题2:

举个例子,有A B C三个类

insert '_Nullable' if the pointer may be null

insert '_Nonnull' if the pointer should never be null

  1. A.m文件绝对路径
  2. A.h文件绝对路径
  3. A.m文件第几行引用了A.h,存在warning
  4. warning在A.h的位置
  5. warning描述是:pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)
  6. fix的两种方法:

所以

结论:

后续:

PS:这是苹果的Bug么?我觉得还是自己挖坑把自己埋了。


本文名称:对待棘手bug,新手与大牛的差距在哪里?
文章URL:http://cdbrznjsb.com/article/cocdsod.html

其他资讯

让你的专属顾问为你服务