Prechádzať zdrojové kódy

Merge pull request #25 from onevcat/fix/queue-name

Update queue name
Wei Wang 10 rokov pred
rodič
commit
629118c856
2 zmenil súbory, kde vykonal 35 pridanie a 10 odobranie
  1. 13 5
      Kingfisher/ImageCache.swift
  2. 22 5
      Kingfisher/ImageDownloader.swift

+ 13 - 5
Kingfisher/ImageCache.swift

@@ -28,8 +28,8 @@ import Foundation
 
 
 private let defaultCacheName = "default"
 private let defaultCacheName = "default"
 private let cacheReverseDNS = "com.onevcat.Kingfisher.ImageCache."
 private let cacheReverseDNS = "com.onevcat.Kingfisher.ImageCache."
-private let ioQueueName = "com.onevcat.Kingfisher.ImageCache.ioQueue"
-private let processQueueName = "com.onevcat.Kingfisher.ImageCache.processQueue"
+private let ioQueueName = "com.onevcat.Kingfisher.ImageCache.ioQueue."
+private let processQueueName = "com.onevcat.Kingfisher.ImageCache.processQueue."
 
 
 private let defaultCacheInstance = ImageCache(name: defaultCacheName)
 private let defaultCacheInstance = ImageCache(name: defaultCacheName)
 private let defaultMaxCachePeriodInSecond: NSTimeInterval = 60 * 60 * 24 * 7 //Cache exists for 1 week
 private let defaultMaxCachePeriodInSecond: NSTimeInterval = 60 * 60 * 24 * 7 //Cache exists for 1 week
@@ -59,7 +59,7 @@ public class ImageCache {
     }
     }
     
     
     //Disk
     //Disk
-    private let ioQueue = dispatch_queue_create(ioQueueName, DISPATCH_QUEUE_SERIAL)
+    private let ioQueue: dispatch_queue_t
     private let diskCachePath: String
     private let diskCachePath: String
     private var fileManager: NSFileManager!
     private var fileManager: NSFileManager!
     
     
@@ -69,7 +69,7 @@ public class ImageCache {
     /// The largest disk size can be taken for the cache. It is the total allocated size of cached files in bytes. Default is 0, which means no limit.
     /// The largest disk size can be taken for the cache. It is the total allocated size of cached files in bytes. Default is 0, which means no limit.
     public var maxDiskCacheSize: UInt = 0
     public var maxDiskCacheSize: UInt = 0
     
     
-    private let processQueue = dispatch_queue_create(processQueueName, DISPATCH_QUEUE_CONCURRENT)
+    private let processQueue: dispatch_queue_t
     
     
     /// The default cache.
     /// The default cache.
     public class var defaultCache: ImageCache {
     public class var defaultCache: ImageCache {
@@ -79,17 +79,25 @@ public class ImageCache {
     /**
     /**
     Init method. Passing a name for the cache. It represents a cache folder in the memory and disk.
     Init method. Passing a name for the cache. It represents a cache folder in the memory and disk.
     
     
-    :param: name Name of the cache.
+    :param: name Name of the cache. It will be used as the memory cache name and the disk cache folder name. This value should not be an empty string.
     
     
     :returns: The cache object.
     :returns: The cache object.
     */
     */
     public init(name: String) {
     public init(name: String) {
+        
+        if name.isEmpty {
+            fatalError("[Kingfisher] You should specify a name for the cache. A cache with empty name is not permitted.")
+        }
+        
         let cacheName = cacheReverseDNS + name
         let cacheName = cacheReverseDNS + name
         memoryCache.name = cacheName
         memoryCache.name = cacheName
         
         
         let paths = NSSearchPathForDirectoriesInDomains(.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true)
         let paths = NSSearchPathForDirectoriesInDomains(.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true)
         diskCachePath = paths.first!.stringByAppendingPathComponent(cacheName)
         diskCachePath = paths.first!.stringByAppendingPathComponent(cacheName)
         
         
+        ioQueue = dispatch_queue_create(ioQueueName + name, DISPATCH_QUEUE_SERIAL)
+        processQueue = dispatch_queue_create(processQueueName + name, DISPATCH_QUEUE_CONCURRENT)
+        
         dispatch_sync(ioQueue, { () -> Void in
         dispatch_sync(ioQueue, { () -> Void in
             self.fileManager = NSFileManager()
             self.fileManager = NSFileManager()
         })
         })

+ 22 - 5
Kingfisher/ImageDownloader.swift

@@ -31,9 +31,10 @@ public typealias ImageDownloaderCompletionHandler = CompletionHandler
 
 
 public typealias RetrieveImageDownloadTask = NSURLSessionDataTask
 public typealias RetrieveImageDownloadTask = NSURLSessionDataTask
 
 
-private let downloaderBarrierName = "com.onevcat.Kingfisher.ImageDownloader.Barrier"
-private let imageProcessQueueName = "com.onevcat.Kingfisher.ImageDownloader.Process"
-private let instance = ImageDownloader()
+private let defaultDownloaderName = "default"
+private let downloaderBarrierName = "com.onevcat.Kingfisher.ImageDownloader.Barrier."
+private let imageProcessQueueName = "com.onevcat.Kingfisher.ImageDownloader.Process."
+private let instance = ImageDownloader(name: defaultDownloaderName)
 
 
 public class ImageDownloader: NSObject {
 public class ImageDownloader: NSObject {
     
     
@@ -55,8 +56,8 @@ public class ImageDownloader: NSObject {
     public var trustedHosts: Set<String>?
     public var trustedHosts: Set<String>?
     
     
     // MARK: - Internal property
     // MARK: - Internal property
-    let barrierQueue = dispatch_queue_create(downloaderBarrierName, DISPATCH_QUEUE_CONCURRENT)
-    let processQueue = dispatch_queue_create(imageProcessQueueName, DISPATCH_QUEUE_CONCURRENT)
+    let barrierQueue: dispatch_queue_t
+    let processQueue: dispatch_queue_t
     
     
     typealias CallbackPair = (progressBlock: ImageDownloaderProgressBlock?, completionHander: ImageDownloaderCompletionHandler?)
     typealias CallbackPair = (progressBlock: ImageDownloaderProgressBlock?, completionHander: ImageDownloaderCompletionHandler?)
     
     
@@ -67,6 +68,22 @@ public class ImageDownloader: NSObject {
     public class var defaultDownloader: ImageDownloader {
     public class var defaultDownloader: ImageDownloader {
         return instance
         return instance
     }
     }
+    
+    /**
+    Init a downloader with name.
+    
+    :param: name The name for the downloader. It should not be empty.
+    
+    :returns: The downloader object.
+    */
+    public init(name: String) {
+        if name.isEmpty {
+            fatalError("[Kingfisher] You should specify a name for the downloader. A downloader with empty name is not permitted.")
+        }
+        
+        barrierQueue = dispatch_queue_create(downloaderBarrierName + name, DISPATCH_QUEUE_CONCURRENT)
+        processQueue = dispatch_queue_create(imageProcessQueueName + name, DISPATCH_QUEUE_CONCURRENT)
+    }
 }
 }
 
 
 // MARK: - Download method
 // MARK: - Download method