zoukankan      html  css  js  c++  java
  • 原来是为了线程安全,才把 对ui的操作 放到了主线程里面去了,

    转:http://tangqiaoboy.blog.163.com/blog/static/1161142582011873458953/

    主道路,人行道,不要占用资源,

    在单机的多线程程序里,为了保证UI的操作线程安全,都会要求UI的操作在一个特定的线程里面进行,通常情况下,这个特定线程指的是程序的主线程。所以,当你的代码在主线程运行的时候,实际上会造成UI不能重绘,应该尽量把长时间的操作放到非主线程中去。
           对于在iphone里的app也一样应该遵守上面这个原则。不过iphone的 UIWebView的stringByEvaluatingJavaScriptFromString只能在主线程里面被调用,如果恰好这个js执行时间比较长,就会造成程序卡死。iphone版的有道笔记的编辑功能就是用内嵌UIWebView + js来实现的,这样的话,如果笔记内容非常复杂,在保存的时候,有可能js会执行1-2秒钟,造成程序有1-2秒的假死状态。
           一种可能的改进方法是,将js改成异步调用的,即stringByEvaluatingJavaScriptFromString调用的js函数,js函数里用 setTimeout 设置一个异步的调用方法,然后立即返回。这样主线程就不会被阻塞。不过这样的坏处就是,因为js执行异步了,stringByEvaluatingJavaScriptFromString无法取得js函数执行的真实返回值。
           为了改进上面的方法,只有再增加一个js的异步回调,让js异步调用完成后,通知UIWebView。但是这样又会带来一个问题,如果有多个js异步操作,那么还需要在UIWebView记录下每个异步操作的id及其操作的相关数据,以便于区分多个回调的类型。
           于是,一个复杂的异步回调模型就这样搞出来了。但其实我想说,去他妈的,js执行时间长的情况非常非常少,还是不管了算了。

    闭包是一个函数(或指向函数的指针),再加上该函数执行的外部的上下文变量(有时候也称作自由变量)。原来就是一个引用,对函数的引用, 

  • 相关阅读:
    「Python」pandas入门教程
    「Python」字符串操作内置函数
    「Python」10个python项目
    python-基础入门-序
    提取网站图片
    c#图片添加水印
    js获取url传递的参数
    构建之法阅读笔记01
    学习进度条<第一周>
    30道四则运算<1>
  • 原文地址:https://www.cnblogs.com/guligei/p/3511926.html
Copyright © 2011-2022 走看看