美文网首页
Swift的对象池模式及如何处理并发访问

Swift的对象池模式及如何处理并发访问

作者: 蜜蜂6520 | 来源:发表于2017-05-04 01:09 被阅读49次

    对象池模式用来管理一组可重用的对象,可从对象池获取对象来完成任务,用完之后再还给对象池。
    系统UITableViewCell的创建与分配就使用了对象池模式:dequeueReusableCell(withIdentifier:)
    对象池模式可用于场景:固定个数可重用组件、队列最大并发数、信号量等

    对象池模式及处理并发访问

    final class Pool<T> {
        
        private var data = [T]()
        
        // 创建串行队列
        private let serialQueue = DispatchQueue(label: "serialQueue")
        
        let semaphore:DispatchSemaphore
        
        init(items:[T]) {
            
            data.reserveCapacity(items.count)
            
            data.append(contentsOf: items)
            
            // 创建信号量
            semaphore = DispatchSemaphore(value: items.count)
            
        }
        
        func getFromPool() -> T? {
            
            var result:T?
            
            // 信号量-1
            semaphore.wait()
            
            serialQueue.sync {
                
                result = data.removeFirst()
                
            }
            
            return result
            
        }
        
        func returnToPool(item:T) {
            
            serialQueue.async {
                
                self.data.append(item)
                
                // 信号量+1
                self.semaphore.signal()
                
            }
            
        }
        
    }
    

    定义成泛型类便于在项目中复用代码。

    如果觉得我的文章对您有用,请点击喜欢。您的支持将鼓励我继续创作!

    大家有什么不懂或我哪里写错了都可以评论留言,我一定会回复的~

    相关文章

      网友评论

          本文标题:Swift的对象池模式及如何处理并发访问

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