| /* |
| * This file is part of the SDWebImage package. |
| * (c) Olivier Poitrey <rs@dailymotion.com> |
| * |
| * For the full copyright and license information, please view the LICENSE |
| * file that was distributed with this source code. |
| */ |
| |
| #import "UIView+WebCacheOperation.h" |
| #import "objc/runtime.h" |
| |
| static char loadOperationKey; |
| |
| @implementation UIView (WebCacheOperation) |
| |
| - (NSMutableDictionary *)operationDictionary { |
| NSMutableDictionary *operations = objc_getAssociatedObject(self, &loadOperationKey); |
| if (operations) { |
| return operations; |
| } |
| operations = [NSMutableDictionary dictionary]; |
| objc_setAssociatedObject(self, &loadOperationKey, operations, OBJC_ASSOCIATION_RETAIN_NONATOMIC); |
| return operations; |
| } |
| |
| - (void)sd_setImageLoadOperation:(id)operation forKey:(NSString *)key { |
| [self sd_cancelImageLoadOperationWithKey:key]; |
| NSMutableDictionary *operationDictionary = [self operationDictionary]; |
| [operationDictionary setObject:operation forKey:key]; |
| } |
| |
| - (void)sd_cancelImageLoadOperationWithKey:(NSString *)key { |
| // Cancel in progress downloader from queue |
| NSMutableDictionary *operationDictionary = [self operationDictionary]; |
| id operations = [operationDictionary objectForKey:key]; |
| if (operations) { |
| if ([operations isKindOfClass:[NSArray class]]) { |
| for (id <SDWebImageOperation> operation in operations) { |
| if (operation) { |
| [operation cancel]; |
| } |
| } |
| } else if ([operations conformsToProtocol:@protocol(SDWebImageOperation)]){ |
| [(id<SDWebImageOperation>) operations cancel]; |
| } |
| [operationDictionary removeObjectForKey:key]; |
| } |
| } |
| |
| - (void)sd_removeImageLoadOperationWithKey:(NSString *)key { |
| NSMutableDictionary *operationDictionary = [self operationDictionary]; |
| [operationDictionary removeObjectForKey:key]; |
| } |
| |
| @end |