如何设置功能的时间限制?

How to set time limit of function?

在我的项目中,我正在访问来自 URL 的图像。在这些 URL 中,我给出了 2-3 个没有任何数据的虚拟 URL。但是我的代码需要更多时间来访问并识别 url 上没有 imageData。这是代码

func callImageURL(urlString : String) -> UIImage
{


    // define an image
    var contentImage : UIImage = UIImage(named: "defaultImage.jpg")!

    // convert String url to NSURL
    let url = NSURL(string: urlString)

    // if url exist
    if (url != nil)
    {
        // fetch the imageData from url
        let data = NSData(contentsOfURL: url!)

        // if image data exist
        if (data != nil)
        {
            // convert imagedata back to an image
            contentImage = UIImage(data: data!)!
        }
    }


    return contentImage
}

所以我的问题是如何对我的代码设置执行时间限制。或者有什么方法可以让我的代码更有效率吗?

 NSData(contentsOfURL: url!)

是一个同步请求,所以它会阻塞你的主线程直到它执行。也没有错误检查,可能是你的 url 是 404 或者它可能只是 timeout 在这种情况下它可能会阻塞你的主线程很容易超过 4 秒。

Best practice is to use new NSURLSession API to download the image asynchronously. That way the request can be cached as well and you check for appropriate error callbacks without blocking your main thread.

我会建议检查 Alamofire 这可以帮助您处理网络请求甚至进度块。

如果你有一些耗时的函数,你可以在后台线程中调用它们,然后在主线程中更新UI。 代码示例:

func callImageURL(urlString : String, completion: UIImage -> Void) {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
        var contentImage = UIImage(named: "defaultImage.jpg")

        if let url = NSURL(string: urlString), data = NSData(contentsOfURL: url)  {
            contentImage = UIImage(data: data)
        }

        dispatch_async(dispatch_get_main_queue()) {
            completion(contentImage!)
        }
    }
}

callImageURL("your url") {image in
    //Use your image
}