金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > 编程 > Python之IO多路复用,python_距离测量

Python之IO多路复用,python_距离测量

发布时间:2019-12-04 04:35编辑:编程浏览(113)

    WKWebView进度及title

    WKWebView进度及title

    WKWebView 的estimatedProgress和title 都是KVO模式,所以可以添加监控:

        [webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:NULL];

        [webView addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:NULL];

    •  

    监控的实现方法:

    • (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

     

        if ([keyPath isEqualToString:@"estimatedProgress"]) {

     

            if (object == webView) {

                [self.progressView setAlpha:1.0f];

                [self.progressView setProgress:self.currentSubView.webView.estimatedProgress animated:YES];

     

                if(self.currentSubView.webView.estimatedProgress >= 1.0f) {

     

                    [UIView animateWithDuration:0.3 delay:0.3 options:UIViewAnimationOptionCurveEaseOut animations:^{

                        [self.progressView setAlpha:0.0f];

                    } completion:^(BOOL finished) {

                        [self.progressView setProgress:0.0f animated:NO];

                    }];

     

                }

            }

            else

            {

                [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];

            }

     

        }

        else if ([keyPath isEqualToString:@"title"])

        {

            if (object == self.webView) {

                self.title = self.webView.title;

     

            }

            else

            {

                [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];

     

            }

        }

        else {

     

            [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];

        }

    }

    •  

    这里的进度增加了动画,类似safari的进度效果

    需要注意的是销毁的时候一定要移除监控

            [webView removeObserver:self forKeyPath:@"estimatedProgress"];

            [webView removeObserver:self forKeyPath:@"title"];

     

    swift:

    // 监听

            theWebView?.addObserver(self, forKeyPath: "estimatedProgress", options: NSKeyValueObservingOptions.New, context: nil)

            theWebView?.addObserver(self, forKeyPath: "title", options: NSKeyValueObservingOptions.New, context: nil)

     

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {

            if keyPath == "estimatedProgress" {

     

                if ((object?.isEqual(theWebView)) != false) {

                     self.progressView.alpha = 1.0

                    self.progressView.setProgress(Float((self.theWebView?.estimatedProgress)!), animated: true)

     

                    if self.theWebView?.estimatedProgress >= 1.0 {

     

                        UIView.animateWithDuration(0.3, delay: 0.3, options: .CurveEaseOut, animations: {

                            self.progressView.alpha = 0.0

                            }, completion: { (finished) in

                                self.progressView.setProgress(0.0, animated: false)

                        })

                    }

                }else {

                    super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)

                }

            }

        }

        deinit {

            webView.removeObserver(self, forKeyPath: "estimatedProgress")

            webView.removeObserver(self, forKeyPath: "title")

        }

    之所以写这个,其实就是希望能对距离有一些概念,当然这个也是很基础的,不过千里之行始于足下嘛,各种路径算法,比如a*什么的都会用到这个

    引子

    距离测量有三种方式

    在学完协程之后,了解到它最优也是解决IO操作的,那么俩个点、

    1、欧式距离,这个是最常用的距离测量方式

    协程:遇到IO操作就切换。 
    但什么时候切回去呢?怎么确定IO操作完了?

    ((x1-x2)^2 + (y1-y2)^2)^0.5

    诸多诸多

    得到一个原型区域的距离

    很多程序员可能会考虑使用“线程池”或“连接池”。“线程池”旨在减少创建和销毁线程的频率,其维持一定合理数量的线程,并让空闲的线程重新承担新的执行任务。“连接池”维持连接的缓存池,尽量重用已有的连接、减少创建和关闭连接的频率。

    #设起始坐标是原点,即(0,0)
    y_result = []
    for y in range(10,-10,-1):
      x_result = []
      for x in range(-10,10,1):
        #((0-x)**2 + (0-y)**2)**0.5
        if ((0-x)**2 + (0-y)**2)**0.5 <= 9:
          x_result.append('*')
        else:
          x_result.append(' ')
      y_result.append(''.join(x_result))
    
    for i in y_result:
      print i
    

    这两种技术都可以很好的降低系统开销,都被广泛应用很多大型系统,如websphere、tomcat和各种数据库等。但是,“线程池”和“连接池”技术也只是在一定程度上缓解了频繁调用IO接口带来的资源占用。而且,所谓“池”始终有其上限,当请求大大超过上限时,“池”构成的系统对外界的响应并不比没有池的时候效果好多少。所以使用“池”必须考虑其面临的响应规模,并根据响应规模调整“池”的大小。
    对应上例中的所面临的可能同时出现的上千甚至上万次的客户端请求,“线程池”或“连接池”或许可以缓解部分压力,但是不能解决所有问题。总之,多线程模型可以方便高效的解决小规模的服务请求,但面对大规模的服务请求,多线程模型也会遇到瓶颈,可以用非阻塞接口来尝试解决这个问题

     

    一、事件驱动模型介绍

    2、街区距离,这个一般游戏中用到的会比较多,之所以叫街区,是因为西方街道通常都是东南,东北,西南,西北这样

    线性模式

    |x1-x2| + |y1-y2|

    传统的编程是如下线性模式的:

    得到一个菱形区域的距离

    开始--->代码块A--->代码块B--->代码块C--->代码块D--->......--->结束

    本文由金沙国际官网发布于编程,转载请注明出处:Python之IO多路复用,python_距离测量

    关键词: