44 lines
1.3 KiB
Objective-C
44 lines
1.3 KiB
Objective-C
|
|
#import "NSObject+TDDelegateProxy.h"
|
|
#import <objc/runtime.h>
|
|
|
|
#if TARGET_OS_IOS
|
|
#import <UIKit/UIKit.h>
|
|
#endif
|
|
|
|
@implementation NSObject (TDDelegateProxy)
|
|
|
|
- (NSSet<NSString *> *)thinkingdata_optionalSelectors {
|
|
return objc_getAssociatedObject(self, _cmd);
|
|
}
|
|
|
|
- (void)setThinkingdata_optionalSelectors:(NSSet<NSString *> *)thinkingdata_optionalSelectors {
|
|
objc_setAssociatedObject(self, @selector(thinkingdata_optionalSelectors), thinkingdata_optionalSelectors, OBJC_ASSOCIATION_COPY);
|
|
}
|
|
|
|
- (TDDelegateProxyObject *)thinkingdata_delegateObject {
|
|
return objc_getAssociatedObject(self, _cmd);
|
|
}
|
|
|
|
- (void)setThinkingdata_delegateObject:(TDDelegateProxyObject *)thinkingdata_delegateObject {
|
|
objc_setAssociatedObject(self, @selector(thinkingdata_delegateObject), thinkingdata_delegateObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
}
|
|
|
|
- (BOOL)thinkingdata_respondsToSelector:(SEL)aSelector {
|
|
if ([self thinkingdata_respondsToSelector:aSelector]) {
|
|
return YES;
|
|
}
|
|
if (@available(iOS 18.0, *)) {
|
|
char startOfHeader = (char)sel_getName(aSelector);
|
|
if (startOfHeader == '\x01') {
|
|
return NO;
|
|
}
|
|
}
|
|
if ([self.thinkingdata_optionalSelectors containsObject:NSStringFromSelector(aSelector)]) {
|
|
return YES;
|
|
}
|
|
return NO;
|
|
}
|
|
|
|
@end
|