美文网首页
Swift多线程之Operation(一)

Swift多线程之Operation(一)

作者: 只爱随便看看 | 来源:发表于2019-10-18 09:02 被阅读0次

自定义Operation子类:


Operation操作状态.png

代码实现:

private final class ImageDownloadOperation: Operation {
        
    let url: URL
        
    init(url: URL) {
        self.url = url
    }
    
    internal var _executing = false {
        willSet {
            willChangeValue(forKey: "isExecuting")
        }
        didSet {
            didChangeValue(forKey: "isExecting")
        }
    }
    
    override var isExecuting: Bool {
        return _executing
    }
    
    internal var _finished = false {
        willSet {
            willChangeValue(forKey: "isFinished")
        }
        didSet {
            didChangeValue(forKey: "isFinished")
        }
    }
    
    public override var isFinished: Bool {
        return _finished
    }
    
    override func start() {
        _executing = true
        
        URLSession.shared.dataTask(with: url) { [weak self] (data, response, error) in
            guard let welf = self else { return }
            
            guard !welf.isCancelled else {
                welf._executing = false
                welf._finished = true
                return
            }
            
            guard let data = data, let httpResponse = response as? HTTPURLResponse, error == nil else {
                welf._executing = false
                welf._finished = true
                return
            }
            
            guard httpResponse.statusCode == 200 else {
                welf._executing = false
                welf._finished = true
                return
            }
                        
            guard !welf.isCancelled else {
                welf._executing = false
                welf._finished = true
                return
            }
            
            //完成下载
            DispatchQueue.main.async {
                
            }
            
            //处理缓存
            
            welf._executing = false
            welf._finished = true
        }.resume()
    }
}

定义_executing,_finished的原因是因为它们只有对应的get方法:


Operation.png

参考资料

· Swift多线程之Operation:异步加载CollectionView图片

相关文章

  • Swift 5.x 多线程

    Swift多线程编程方案: Thread Cocoa Operation (Operation 和 Operati...

  • iOS-Swift相关

    swift程序. 1.Swift多线程之Operation:异步加载CollectionView图片2.Swift...

  • iOS多线程浅谈-Thread

    iOS swift多线程主要包括Thread,GCD,Operation 1.Thread三种 方式1 方式2: ...

  • Swift多线程之Operation(一)

    自定义Operation子类: 代码实现: 定义_executing,_finished的原因是因为它们只有对应的...

  • iOS多线程操作:NSOperation

    Operation也是我们常见的多线程操作方式之一,在许多知名框架的多线程操作都是使用的Operation这种操作...

  • Swift- 多线程编程 Operation

    相关文章:NSOperation 项目Demo代码 一、NSOperation子类 NSOperation是一个抽...

  • Swift - 多线程 Operation和OperationQ

    Cocoa Operation不需要关心线程管理和数据同步的事情,可以把精力放在自己需要执行的操作上。相关的类有O...

  • 多线程-Operation

    多线程之Operation 本文参考 reywenderlich 的一篇文章和demo介绍自定义operation...

  • IOS多线程

    多线程技术 Thread 给线程加锁使线程同步 Operation

  • GCD

    iOS多线程 Swift4 GCD深入解析swift GCD 的一些高级用法GCD 之线程组(Dispatch G...

网友评论

      本文标题:Swift多线程之Operation(一)

      本文链接:https://www.haomeiwen.com/subject/vlgbmctx.html