Примеры Multithreading iOS Swift

Два примера использования Multithreading и GCD на языке Swift

Этот пример позволяет получить что-то по ссылке в интернет. Очевидно, что не стоит это делать в основном потоке.

let session = NSURLSession(NSURLSessionConfiguration.defaultSessionConfiguration())
  if let url = NSURL(string: “http://url”) {
      let request = NSURLRequest(URL: url)
      let task = session.downloadTaskWithRequest(request) { (localURL, response, error) in
        // вот тут мы обрабатываем получаемые данные, но затем, чтобы обновить UI нужно вернуться в основной поток, что мы и делаем ниже
        dispatch_async(dispatch_get_main_queue()) {
            // и вот тут уже меняем интерфейс в соответствии с тем, что загрузили из интернета 
        }
     }
     task.resume()
}

А это пример готового решения загрузки картинки из интернета и установки ее в UI

 

    private func fetchImage() {
        if let url = imageURL {
            spinner?.startAnimating()
            let qos = Int(QOS_CLASS_USER_INITIATED.rawValue)
            dispatch_async(dispatch_get_global_queue(qos, 0)) { () -> Void in
                let imageData = NSData(contentsOfURL: url)
                
                dispatch_async(dispatch_get_main_queue()) {
                    if url == self.imageURL { // эта строка проверяет что вывести нужно именно то что хочет пользователь. т.к. интерфейс не блокируется, то пользователь может успеть запросить все подряд.
                        if imageData != nil {
                            self.image = UIImage(data: imageData!)
                            spinner?.stopAnimating()
                        } else {
                            self.image = nil
                            self.loadStanford()
                        }
                    }
                }
                
            }
        }
        
    }

 

Добавить комментарий

Ваш адрес email не будет опубликован.

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.