SDK_UnityMoney/Assets/Plugins/iOS/ThinkingSDK/Source/Hook/TDDelegateProxyObject.m

57 lines
1.5 KiB
Objective-C

#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