博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记一例UIView突然不显示的排查过程
阅读量:5092 次
发布时间:2019-06-13

本文共 872 字,大约阅读时间需要 2 分钟。

一、现象

  今日在开发中遇到一个诡异问题,一个自定义的AlertView在显示之后瞬间在屏幕上消失,但是其对象在内存中依然存在

 

二、排查

  通过lldb命令查询到view.superview.superview不存在为nil,才明白这个view的父view的父view被释放掉了,释放过程中该view自动从屏幕中移除导致。

  该问题排查花费一个多小时。

 

三、总结UIView不显示的思路

  • 判断这个view的大小是否为CGRectZero,这个view的位置是否超出父view。autolayout布局错误等
  • 判断这个view的透明度信息是否为0,这个view的hidden是否为yes。
  • 如果上面的信息正常,依次递归父view的上述信息是否正常。
  • 查看界面是否未刷新,是否在子线程刷新了界面

  如果发现异常,但是未能定位到view被隐藏的调用逻辑

  1)在常规的隐藏,hidden,alpha处下断点

  2)在removeFromSuperview处下断点

  3)针对异常的对象下内存访问断点

  4)针对异常的view,将其继承自定义view,重载特殊方法,在该方法中下断点

  

@implementation DebugView- (void)didMoveToWindow{    if(self.window == nil)    {//        NSLog(@"visiable");    }    else    {//        NSLog(@"invisiable");    }}- (void)didMoveToSuperview{    if(self.superview == nil)    {//        NSLog(@"visiable");    }    else    {//        NSLog(@"invisiable");    }}@end

  

转载于:https://www.cnblogs.com/doudouyoutang/p/9585759.html

你可能感兴趣的文章
web前端(八)——ajax与jsonp
查看>>
机器学习的几种主要学习方法
查看>>
获取当前时间getDate()注意点
查看>>
UniMelb Comp30022 IT Project (Capstone) - 2.Vuforia in Unity
查看>>
orm框架与缓存的关系
查看>>
shell脚本实现FTP自动上传文件
查看>>
CGContextRef:mask和layer绘图
查看>>
设计模式之装饰者模式
查看>>
大数据学习资源(上)
查看>>
.out
查看>>
Python初学手记----在window系统中安装环境
查看>>
转载:苹果流媒体产品诞生点滴--写在乔布斯逝世5周年
查看>>
spss clementine Twostep Cluster(两步聚类 二阶聚类)
查看>>
如何实现大数据系统
查看>>
python 面试题之 生成器
查看>>
CH24C 逃不掉的路
查看>>
C# 获取文件路径
查看>>
探讨PHP页面跳转几种实现技巧
查看>>
排序比赛的回顾
查看>>
RT-Thread 4.0 + STM32F407 学习笔记1
查看>>