57 lines
1.5 KiB
Mathematica
57 lines
1.5 KiB
Mathematica
|
|
|
||
|
|
#import "TDDelegateProxyObject.h"
|
||
|
|
#import <objc/message.h>
|
||
|
|
|
||
|
|
NSString * const kTDDelegateClassThinkingSuffix = @"_TD.THINKINGDATA";
|
||
|
|
NSString * const kTDDelegateClassKVOPrefix = @"KVONotifying_";
|
||
|
|
|
||
|
|
@implementation TDDelegateProxyObject
|
||
|
|
|
||
|
|
- (instancetype)initWithDelegate:(id)delegate proxy:(id)proxy {
|
||
|
|
self = [super init];
|
||
|
|
if (self) {
|
||
|
|
_delegateProxy = proxy;
|
||
|
|
|
||
|
|
_selectors = [NSMutableSet set];
|
||
|
|
_delegateClass = [delegate class];
|
||
|
|
|
||
|
|
Class cla = object_getClass(delegate);
|
||
|
|
NSString *name = NSStringFromClass(cla);
|
||
|
|
|
||
|
|
if ([name containsString:kTDDelegateClassKVOPrefix]) {
|
||
|
|
_delegateISA = class_getSuperclass(cla);
|
||
|
|
_kvoClass = cla;
|
||
|
|
} else if ([name containsString:kTDDelegateClassThinkingSuffix]) {
|
||
|
|
_delegateISA = class_getSuperclass(cla);
|
||
|
|
_thinkingClassName = name;
|
||
|
|
} else {
|
||
|
|
_delegateISA = cla;
|
||
|
|
_thinkingClassName = [NSString stringWithFormat:@"%@%@", name, kTDDelegateClassThinkingSuffix];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return self;
|
||
|
|
}
|
||
|
|
|
||
|
|
- (Class)thinkingClass {
|
||
|
|
return NSClassFromString(self.thinkingClassName);
|
||
|
|
}
|
||
|
|
|
||
|
|
- (void)removeKVO {
|
||
|
|
self.kvoClass = nil;
|
||
|
|
self.thinkingClassName = [NSString stringWithFormat:@"%@%@", self.delegateISA, kTDDelegateClassThinkingSuffix];
|
||
|
|
[self.selectors removeAllObjects];
|
||
|
|
}
|
||
|
|
|
||
|
|
@end
|
||
|
|
|
||
|
|
#pragma mark - Utils
|
||
|
|
|
||
|
|
@implementation TDDelegateProxyObject (Utils)
|
||
|
|
|
||
|
|
+ (BOOL)isKVOClass:(Class _Nullable)cls {
|
||
|
|
return [NSStringFromClass(cls) containsString:kTDDelegateClassKVOPrefix];
|
||
|
|
}
|
||
|
|
|
||
|
|
@end
|
||
|
|
|