| /* | |
| * 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 |