随手记今天跟的几个iOS项目代码的问题
休了一阵子假期,今天刚回来上班,项目代码已经有挺大的变化了,我就先体验、发现、跟进问题。
第一个问题是点击某个cell就挂掉的现象,同事表示必现但挺神奇。由于挂掉的时候没有啥有意义的信息,所以先简单粗暴地在
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
打个断点,结果还没命中就挂了。再一看cell的布局,发现是在一个UITableViewCell对象的contentView上面addSubview一个由nib文件加载进来的UI控件,在这个控件中有响应touch事件:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
很遗憾同样还没命中断点就挂了,所以我尝试增加了如下函数:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
结果很意外地发现好了。但是如果将事件传递给super时,依然会挂。从而定位到是上一级视图的问题,后来发现是这么一行代码:
cell.selectedBackgroundView = [[UIView alloc] autorelease];
漏掉初始化了。
第二个问题是在传参过程中,直接将NSNumber指针赋值给BOOL变量,而不是取其boolValue。
直接用@(0)对BOOL值赋值,而不是[@(0) boolValue];
第三个问题是在UITableView的headerView上结合searchBar控件遇到的,在非ARC的dealloc代码中,挂在:
[super dealloc];
这个比较容易联想到二次释放,所以我直接先采用Profile工具做一次NSZombie的检查,令人开心的是中了,令人遗憾的是没有定位到太有价值的代码行。
但是可以基本推断出跟UITableView及其headerView有一定关系。又由于场景是可以重现的,所以通过注释掉dealloc函数里德其它代码定位到是tableView释放时引发的,但经常反复检查,确认没有二次释放,最终发现通过以下代码可以避免:
self.tableView.tableHeaderView = nil;
这点倒没有完全理清楚,目前怀疑是引用searchBarController和searchBar时,一些引用技术上引发的问题。
……
随手记今天跟的几个iOS项目代码的问题的更多相关文章
- iOS 项目代码组织
参考了很多系列,发现老外们都比较喜欢 group by type,这两个还不错: http://akosma.com/2009/07/28/code-organization-in-xcode-pro ...
- 开源 iOS 项目分类索引大全 - 待整理
开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...
- iOS项目开发中的知识点与问题收集整理①(Part 一)
前言部分 注:本文并非绝对原创 大部分内容摘自 http://blog.csdn.net/hengshujiyi/article/details/20943045 文中有些方法可能已过时并不适用于现在 ...
- ios项目里扒出来的json文件
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...
- 现有iOS项目集成React Native过程记录
在<Mac系统下React Native环境搭建>配置了RN的开发环境,然后,本文记录在现有iOS项目集成React Native的过程,官方推荐使用Cocoapods,项目一开始也是使用 ...
- iOS项目的本地化处理(多国语言)
项目的本地化就是:iOS系统在不同语言环境下自动切换语言,从而实现一个app发布到全世界各个国家的AppStore上. 我们不仅仅需要在iOS项目中做本地化处理,在上架iOS APP的时候,也需要做对 ...
- 在Xcode 6 beta里编译Cocos2d-x iOS项目时失败
转载 在Xcode 6 beta里编译Cocos2d-x iOS项目时可能会失败,提示如下错误: Undefined symbols for architecture i386: "_fwr ...
- phonegap创建的ios项目推送消息出现闪退现象
使用phonegap创建的ios项目,推送消息时,当程序在前台运行或者在后台运行状态下,推送消息过来,可以解析并且跳转: 但是在程序从后台退出的状态下,当消息推送过来的时候,点击通知栏,打开程序,程序 ...
- MVVM 模式下iOS项目目录结构详细说明
➠更多技术干货请戳:听云博客 我们在做项目的时候,会经常用到各种设计模式,最常见的要数 MVC (模型,视图,控制器)了.但是,今天我们要说的是另一种设计模式——MVVM. 所以 MVVM 到底是什么 ...
随机推荐
- Struts2,Spring,Hibernate三大框架的整合(SSH)
一.搭建struts2 1).导入struts2 jar包 2).编写web.xml 3).编写jsp页面 4).创建action类,action类要继承ActionSupport类 5).创建str ...
- PHP的一些函数
//进制转换类 base_convert //字符转十六进制 binhex
- iOS开发项目名称修改
前言:在IOS开发中,有时候想改一下项目的名字,都会遇到很多麻烦.直接改项目名吧,XCODE又不会帮你改所有的名字.总是有很多文件.文件夹或者是项目设置的项.而且都是不能随便改的,有时候改着改着,编译 ...
- Jacob
http://www.cnblogs.com/luckyxiaoxuan/archive/2012/06/13/2548331.html http://blog.csdn.net/qingwangyo ...
- Delphi 类型转换函数(有几个函数没见过,FloatToStrF,FloatToText等等)
Chr 将一个有序数据转换为一个ANSI字符 Ord 将一个有序类型值转换为它的序号 Round 转换一个实型值为四舍五入后的整型值 Trunc 转换一个实型值为小数截断后的整型值 Int 返回浮点数 ...
- Json.Net系列教程 1.Json.Net介绍及实例
原文 Json.Net系列教程 1.Json.Net介绍及实例 本系列教程假设读者已经对Json有一定的了解,关于Json在这里不多说.本系列教程希望能对读者开发涉及到Json的.Net项目有一定的帮 ...
- python数值计算模块NumPy scipy安装
NumPy为Python提供了快速的多维数组处理的能力,而SciPy则在NumPy基础上添加了众多的科学计算所需的各种工具包,有了这两个库,Python就有几乎和Matlab一样的处理数据和计算的能力 ...
- 转:php+mysql菜单无限级分类(非递归)
php+mysql无限级分类(非递归) 参考:http://www.chhua.com/web-note3244
- CentOS 6.4下Squid代理服务器的安装与配置,反向代理
CentOS 6.4下Squid代理服务器的安装与配置 一.简介 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息. Squid是一个缓存Internet 数据的软件 ...
- poj 2533 Longest Ordered Subsequence(线性dp)
题目链接:http://poj.org/problem?id=2533 思路分析:该问题为经典的最长递增子序列问题,使用动态规划就可以解决: 1)状态定义:假设序列为A[0, 1, .., n],则定 ...