栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在iphone范围内搜索设备ip地址的优化方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在iphone范围内搜索设备ip地址的优化方法

同步方式

如果

Ping.getIPAddress(str)
仅在上一个呼叫完成后才执行对每个呼叫,那么我们需要等待(3秒* 256)= 768秒。

异步方式

另一方面,我们可以对进行多个并发调用

Ping.getIPAddress(str)

假平班

这是我创建的用于测试您的功能的类。

class Ping {    class func getIPAddress(str:String) -> Bool {        sleep(3)        return str == "163.289.2.255"    }}

如您所见,该类确实等待3秒钟(以模拟您的情况),然后

true
仅在传递的
ip
是时才返回
163.289.2.255
。这使我可以复制最坏的情况。

这是我准备的课

class QuantumComputer {    func search(completion:(existingIP:String?) -> ()) {        var resultFound = false        var numProcessed = 0        let serialQueue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_SERIAL)        for i in 0...255 { dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_UTILITY.value), 0)) {     var ip = "163.289.2." + "(i)"     let foundThisOne = Ping.getIPAddress(ip)     dispatch_async(serialQueue) {         if !resultFound {  resultFound = foundThisOne  numProcessed++  if resultFound {      completion(existingIP:ip)  } else if numProcessed == 256 {      completion(existingIP: nil)  }         }     } }        }    }}

该类执行 256异步调用

Ping.getIPAddress(...)

256个异步闭包的结果由以下代码处理:

dispatch_async(serialQueue) {    if !resultFound {        resultFound = foundThisOne        numProcessed++        if resultFound {  completion(existingIP:ip)        } else if numProcessed == 256 {  completion(existingIP: nil)        }    }}

上一个代码块(从第2行到第9行)在我的队列中执行

serialQueue
。此处256个不同的闭包 同步 运行。

  1. 这对于确保一致地访问变量
    resultFound
    和至关重要
    numProcessed
  2. 另一方面,从 性能的 角度来看,这不是问题,因为该代码非常快(只是一堆算术运算)

测试

这就是我从标准ViewController调用它的方式。

class ViewController: UIViewController {    var computer = QuantumComputer()    override func viewDidLoad() {        super.viewDidLoad()        // Do any additional setup after loading the view, typically from a nib.        debugPrintln(NSDate())        computer.search { (existingIP) -> () in debugPrintln("existingIP: (existingIP)") debugPrintln(NSDate())        }    }    override func didReceiveMemoryWarning() {        super.didReceiveMemoryWarning()        // Dispose of any resources that can be recreated.    }}

结论

最后,这是我在iOS模拟器上对其进行测试时的输出。请注意,这是最坏的情况(因为最后检查的号码是有效的IP)。

2015-09-04 20:56:17 +0000"existingIP: Optional("163.289.2.255")"2015-09-04 20:56:29 +0000

只有12秒!

希望这可以帮助。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/376748.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号