记一次帮同事排查由命名引发的问题

原创 2016年04月20日 21:20:03

今天同事在群里发了一个问题,问有没有人碰到类似如下的问题:

-[UILabel stringByTrimmingCharactersInSet:]: unrecognized selector sent to instance 0x7ff08c865970

一位同事第一反应是不是对象被释放了,出现了野指针?

然而加上异常断点、开启Zombie诊断后,并没有带来有用的信息。


我转身问是不是必现的?回答是的。

于是我建议直接给UILabel加个stringByTrimmingCharactersInSet:方法,然后打个断点,就可以从调用栈看出是哪里在调用——结果,整个主线程都是系统框架在调用。

但是从主线程调用栈还是可以看到跟UITableView的代理回调方法有关——具体是跟sectionHeader的获取有关。

我们通过直接注释掉相关方法得到了验证:

- (nullable UITableViewHeaderFooterView *)headerViewForSection:(NSInteger)section

的确是跟这里有关,注释掉后问题消失。

那问题基本就落在headerView的布局上了,这是一个继承自UITableViewHeaderFooterView的子类,点击.h头文件一看,我瞄到了有个UILabel *类型变量叫做text。这样的命名会让我心里一纠结,所以很快就感知到了,因为我会命名为textLabel。

于是我说,这样的命名很容易出现问题,容易发生“将这样命名的变量当做NSString *类型进行传递”的现象。

通过修改属性名称,并且在进行一处处替换的过程中我认真地看着有没有将其错误使用,然而并没有——但是问题还是得到解决了。

于是我们推测,在基类中有NSString *类型的变量名为text,但是在子类中重写了它,导致类型变化,进而引发了问题。


这又让我想起:

There are only two hard things in Computer Science: cache invalidation and naming things.

-- Phil Karlton


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

IOS 字符串中去除特殊符号 stringByTrimmingCharactersInSet 应该用于账号登录等

先上个例子: NSString * str1 =[nameInput.text stringByTrimmingCharactersInSet:[NSCharacterSet whitesp...

记同事一次sql 优化(二)

在new_recommend_materials和channel_materials表相同的条件查询,查询时间相差很大,对于你的问题 new_recommend_materials从命名上看是新表,马...
  • fjq5a
  • fjq5a
  • 2017-01-09 19:33
  • 91

记同事 一次sql优化

最近同事做了一次sql 优化 ,感觉很好,纪录学习下如下所示,该语句查询时间慢,分析过程过下: 1)首先检查实例读写,机器负载均无异常 2)查看channel_materials 表结构...
  • fjq5a
  • fjq5a
  • 2017-01-09 15:22
  • 60

记一次死锁问题的排查和解决

说起来这个事情还是挺悲催的,记得上周忙的不亦乐乎,目标是修改之前另外一个团队留下来的一坨代码中的一些bug,这个项目是做OLAP分析的,分为两个模块,逻辑服务器主要负责一些元数据的操作,例如页面上展示...

记一次JS执行顺序引起的问题排查过程

前一段时间参与了公司火车票系统的开发工作,主要负责接口对接及页面调整的工作。这半个月以来,虽然要投入到其它项目的开发,但偶尔也会被喊去解决一些火车票系统的Bug。今天同事忽然喊我,说生产环境出了一个问...

记一次APP和DB间流量异常问题的排查

情景通过zabbix监控发现有一个应用和数据库之间存在不定时的流量异常(也不频繁),具体为应用server的入向流量和数据库server的出向流量会有短时间(通常在一分钟左右)的激增,甚至快达到千兆网...

记一次死锁问题的排查

最近遇到了一个死锁问题, 记录一下排查的过程. SQL Server中的死锁是DBA们经常会遇到的问题.  常有人混淆了死锁和阻塞, 其实他们的区别还是很明显的.  阻塞的一般原因可能是...

记一次mysql线上问题排查

背景是这样的,我们有个系统每天都会调起多个定时任务,首先quartz每分钟会调起一次检查时间的任务,如果发现时间到达设定的任务执行时间,java代码会向数据库里写入一条记录,然后有另外一个系统就会根据...

记一次内存泄漏排查问题

背景     在使用JavaCV做图像处理时,发现程序运行起来之后,处理了百来次的时候,就报了outofmemory的错误。因为javacv底层就是调用opencv的native方法,判断是出现了内存...

再一次和新同事们谈谈看法(马云)

看了最近内网中各类有意思的讨论,私下里也听了很多老同事对今天新同事特别是那些80后,90后同事们的不理解和不满。。。。。前段时间我们讨论了感恩和敬畏之心,当然光有那些是不够的。我们还要有正确做事的方法...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)