zoukankan      html  css  js  c++  java
  • iOS子线程操作UI问题检查

      iOS开发中,因为大部分函数都不是线程安全的,所以UI子线程中操作UI是非常危险的事,但是有时候因为开发者经验不足,不知道子线程中不能UI,或者知道但是写代码的时候没注意,或者不知道那些函数操作UI了(比如UITableView的reload函数),造成这个问题时常发生,防不胜防,而且iOS不像安卓,一旦子线程中操作UI就直接崩溃,iOS中操作UI只是有可能崩,导致问题经常不好重现,而且经常奔溃堆栈是乱的,找不到出错的地方在哪儿,十分头疼。

      本人写了一个简单的线程检查ui操作的库,当子线程操作ui时,会根据宏定义crash(VIEW_OP_INSPECT_CRASH)或者打印堆栈(VIEW_OP_INSPECT_LOG_STACK)(两者不冲突),基本原理是利用用runtime的class_replaceMethod替换了uiview的大部分api(考虑到性能问题,get操作没有replace),然后在replace的函数中检查当前线程是否是主线程。

      github地址是https://github.com/pualxiao/PXViewOpInspect(刚刚写出来的一个库,不断完善中,轻拍。欢迎大家提出意见和建议,并参与到代码的完善中)

      使用方法很简单,将PXViewOpInspect.h和PXViewOpInspect.m放在工程中就可以了,如果定义了VIEW_OP_INSPECT_CRASH和VIEW_OP_INSPECT_LOG_STACK中的一个宏,就会去替换了uiview的api,否者就不会

      考虑到性能问题,建议在debug模式下使用本库,release下不定义VIEW_OP_INSPECT_CRASH和VIEW_OP_INSPECT_LOG_STACK即可。

      

  • 相关阅读:
    Angular之ngRoute与uiRoute
    Python实现网络测速--转载
    You are using pip version 10.0.1, however version 20.2.2 is available.
    Pycharm导出环境,实现环境迁移
    Python编辑器之pycharm2020.1破解汉化
    Rsyslog系统日志转发
    服务器DNS配置
    服务器系统配置初始化脚本
    系统巡检用到的参数
    inotify高效监控Linux文件系统事件
  • 原文地址:https://www.cnblogs.com/xiaoxibo/p/4987306.html
Copyright © 2011-2022 走看看