美文网首页iOS技术文章
知识小总结五 (事件传递和响应)☀️

知识小总结五 (事件传递和响应)☀️

作者: LeaderBiao | 来源:发表于2017-02-13 14:25 被阅读5次

    传递链

    • 所谓传递链,是事件触发时,系统如何找到事件触发具体地点

    Hit Test (命中测试)

    • iOS使用“命中测试”(hit-testing)去寻找触摸发生下的view。命中测试会执行检测判断是否改触摸点发生在某个具体的view的相对边界之内。如果检测是的,它就会递归的去检测该view的所有子view。该view的层级最底端view包含触摸点,它就成为了“命中测试view”。之后iOS就会决定谁是命中测试view,并且递交触摸事件给它处理。

    传递过程

    • 大致的过程application –> window –> root view –>……–>lowest view,由后到前

    响应链

    • 所谓响应链,是事件触发后,系统怎样决定由谁对该事件进行处理。
      响应器链(responder chain)是一系列相关的响应器对象。它开始于第一个响应器终止于应用对象。如果第一个responder不处理事件(没有实现touches方法),则会根据响应链将事件传递给下一个responder。

    First Responder (第一响应者)

    • First responder就是在响应链中第一个接收事件的对象。

    传递过程

    • 大致的过程initial view –> super view –> …..–> view controller –> window –> Application,由前到后
      inital view 是第一响应者或hit test找到的view

    总结

    • UIApplication-->UIWindow-->递归找到最合适处理的控件-->控件调用touches方法-->判断是否实现touches方法-->没有实现默认会将事件传递给上一个响应者-->找到上一个响应者-->找不到方法作废

    真机的崩溃(crash)问题

    崩溃现象

    • 程序崩溃,在模拟器中会直接显示崩溃并给出崩溃信息。对于已经安装到真机上的APP,崩溃会直接闪退

    崩溃原因

        低内存闪退
    

    程序的CPU或内存用量过高时,系统会干掉该程序
    代码bug
    比如数组越界、插空、空引用、引用未定义方法、多线程安全性、访问野指针、发送未实现的selector等
    Watchdog超时
    如果我们的应用程序对一些特定的UI事件(比如启动、挂起、恢复、结束)响应不及时,Watchdog会把我们的应用程序干掉
    使用各种手机助手导致的崩溃
    用户使用如PP手机助手之类的软件下载APP,可能会被苹果封禁,造成闪退


    获取崩溃日志

    • iOS设备上的应用闪退时,操作系统会生成一个崩溃报告,也叫崩溃日志,保存在设备上。

    • 崩溃日志上有很多有用的信息,包括应用是什么情况下闪退的。通常,上面有每个正在执行线程的完整堆栈跟踪信息,所以你能从中了解到闪退发生时各线程都在做什么,并分辨出闪退发生在哪个线程上。

    本机崩溃日志

        XCode 的菜单Window->Organizer 选择Devices -> 选中的手机 -> 点击手机名称左边的箭头
    

    用户崩溃日志

        通过iTunes Connect(Manage Your Applications - View Details - Crash Reports)获取用户的crash日志.
    

    相关文章

      网友评论

        本文标题:知识小总结五 (事件传递和响应)☀️

        本文链接:https://www.haomeiwen.com/subject/cszzittx.html