休了一阵子假期,今天刚回来上班,项目代码已经有挺大的变化了,我就先体验、发现、跟进问题。

第一个问题是点击某个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项目代码的问题的更多相关文章

  1. iOS 项目代码组织

    参考了很多系列,发现老外们都比较喜欢 group by type,这两个还不错: http://akosma.com/2009/07/28/code-organization-in-xcode-pro ...

  2. 开源 iOS 项目分类索引大全 - 待整理

    开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...

  3. iOS项目开发中的知识点与问题收集整理①(Part 一)

    前言部分 注:本文并非绝对原创 大部分内容摘自 http://blog.csdn.net/hengshujiyi/article/details/20943045 文中有些方法可能已过时并不适用于现在 ...

  4. 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. ...

  5. 现有iOS项目集成React Native过程记录

    在<Mac系统下React Native环境搭建>配置了RN的开发环境,然后,本文记录在现有iOS项目集成React Native的过程,官方推荐使用Cocoapods,项目一开始也是使用 ...

  6. iOS项目的本地化处理(多国语言)

    项目的本地化就是:iOS系统在不同语言环境下自动切换语言,从而实现一个app发布到全世界各个国家的AppStore上. 我们不仅仅需要在iOS项目中做本地化处理,在上架iOS APP的时候,也需要做对 ...

  7. 在Xcode 6 beta里编译Cocos2d-x iOS项目时失败

    转载 在Xcode 6 beta里编译Cocos2d-x iOS项目时可能会失败,提示如下错误: Undefined symbols for architecture i386: "_fwr ...

  8. phonegap创建的ios项目推送消息出现闪退现象

    使用phonegap创建的ios项目,推送消息时,当程序在前台运行或者在后台运行状态下,推送消息过来,可以解析并且跳转: 但是在程序从后台退出的状态下,当消息推送过来的时候,点击通知栏,打开程序,程序 ...

  9. MVVM 模式下iOS项目目录结构详细说明

    ➠更多技术干货请戳:听云博客 我们在做项目的时候,会经常用到各种设计模式,最常见的要数 MVC (模型,视图,控制器)了.但是,今天我们要说的是另一种设计模式——MVVM. 所以 MVVM 到底是什么 ...

随机推荐

  1. Mysql数据库中 ,涉及事物,循环添加数据

    ),),   ) BEGIN declare cnt ; declare i ; declare growthid ; DECLARE t_error INTEGER DEFAULT ;  DECLA ...

  2. 过程需要类型为 'ntext/nchar/nvarchar' 的参数 '@statement'

    declare   @Sql Nvarchar(4000)   SET @Sql = ' select * from a_table '要么这样, 要不然在执行存储过程变量前加N'' ALTER PR ...

  3. Grunt.js 上手

    Official Site gruntjs.org/docs/getting-started.html 或者看http://tgideas.qq.com/webplat/info/news_versi ...

  4. 【图文教程】用“iz3d”软件将您的游戏打造为红蓝3D游戏。

    iz3d是一款能将普通3D游戏转换为红蓝3D游戏的软件.基本上支持所有游戏,或许没用过的人会认为这只是类似于播放器中的一个小功能,将平面图形做成“伪3D”红蓝效果. 实际上不是的,游戏与平面图的结构不 ...

  5. Spring Boot Memory Performance

    The Performance Zone is brought to you in partnership with New Relic. Quickly learn how to use Docke ...

  6. ALV的html表头

    在ALV的function的exporting里添加属性: I_CALLBACK_HTML_TOP_OF_PAGE = alv_top_of_page 定义form响应上述ALV属性 *&-- ...

  7. Scraping JavaScript webpages with webkit | WebScraping.com

    Scraping JavaScript webpages with webkit | WebScraping.com Scraping JavaScript webpages with webkit ...

  8. 关于Unix时间戳

    如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript Math.round(new Date().getTime()/1000)ge ...

  9. 在Office Outlook 2013中收发QQ邮件

    选择手动配置 选择第三项 点击More Settings,在Outgoing  Server 勾选 如下 确认后,按下一步完成配置,此时会弹出对话框进行邮件发送测试.

  10. lightOJ 1317 Throwing Balls into the Baskets

    lightOJ  1317  Throwing Balls into the Baskets(期望)  解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/ ...