UITableView中的数据源对象提前释放-创新互联

请看如下代码:其中_dataSource为NSArray的实例对象

创新互联10多年企业网站制作服务;为您提供网站建设,网站制作,网页设计及高端网站定制服务,企业网站制作及推广,对广告制作等多个行业拥有丰富的网站制作经验的网站建设公司。

UITableView中的数据源对象提前释放

UITableView中的数据源对象提前释放

运行之后,滑动tableview,会直接crash,崩溃现象如下:

UITableView中的数据源对象提前释放

没有任何崩溃信息;

解决方案:

第1步:程序在cell.textLabel.text = _dataSource[indexPath.row]处crash,但控制台没有任何的reason;我们可以通过命令行或则Print的形式查看对应对象是否存在问题;

第2步:我们这次采用命令行模式的形式,先用po打印看一下当前这句话涉及到的对象,分别是什么?如下图:

UITableView中的数据源对象提前释放

第3步:通过控制台,我们法线打印输出数据源中的某个元素的时候,出现了问题,reason:The process has been returned to the state before expression evaluation.,那么,我们得思考一下该对象是否涉及到内存提前释放的情况了;

第4步:现在,我们打开查看内存检测选项:

如下图,选择 Edit Scheme -> run -> Diagnostics, 选中 Objective -c Enable Zombie Objects, 最后Close

UITableView中的数据源对象提前释放

再次运行程序,滑动tableview,此时控制台会打印输出如下提示:

UITableView中的数据源对象提前释放

那么,说明我们的_dataSource对象优内存问题;

第5步:回头检查我们的_dataSource,为NSArray对象,创建方式位便利构造器初始化方式,所以,我们需要修改一下:

注意:不要忘记在dealloc中进行释放,当前为手动管理内存模式下

UITableView中的数据源对象提前释放

再次运行,滑动tableview,一切正常,搞定

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享名称:UITableView中的数据源对象提前释放-创新互联
文章地址:http://ybzwz.com/article/dgpoeg.html