77 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| //
 | |
| //  TABaseSyncData.h
 | |
| //  ThinkingSDK
 | |
| //
 | |
| //  Created by wwango on 2022/2/14.
 | |
| //
 | |
| 
 | |
| #import <Foundation/Foundation.h>
 | |
| #import <objc/runtime.h>
 | |
| #import "TAThirdPartySyncProtocol.h"
 | |
| 
 | |
| #define TA_DISTINCT_ID @"ta_distinct_id"
 | |
| #define TA_ACCOUNT_ID  @"ta_account_id"
 | |
| 
 | |
| 
 | |
| #define td_force_inline __inline__ __attribute__((always_inline))
 | |
| 
 | |
| 
 | |
| #define TASyncDataKey @"TASyncDataKey"
 | |
| 
 | |
| 
 | |
| NS_ASSUME_NONNULL_BEGIN
 | |
| 
 | |
| static td_force_inline void __td_td__swizzleWithClassMethod(Class c, NSString *oriSELStr, SEL newSel, IMP newIMP) {
 | |
|     SEL orig = NSSelectorFromString(oriSELStr);
 | |
|     Method origMethod = class_getClassMethod(c, orig);
 | |
|     c = object_getClass((id)c);
 | |
|     
 | |
|     class_addMethod(c, newSel, newIMP, method_getTypeEncoding(origMethod));
 | |
|     
 | |
|     
 | |
|     if(class_addMethod(c, orig, newIMP, method_getTypeEncoding(origMethod))) {
 | |
|         class_replaceMethod(c, newSel, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
 | |
|     } else {
 | |
|         Method newMethod = class_getClassMethod(c, newSel);
 | |
|         method_exchangeImplementations(origMethod, newMethod);
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| static td_force_inline void __td_td_swizzleWithOriSELStr(id target, NSString *oriSELStr, SEL newSEL, IMP newIMP) {
 | |
|     SEL origSEL = NSSelectorFromString(oriSELStr);
 | |
|     Method origMethod = class_getInstanceMethod([target class], origSEL);
 | |
|     
 | |
|     if ([target respondsToSelector:origSEL]) {
 | |
| 
 | |
|         class_addMethod([target class], newSEL, newIMP, method_getTypeEncoding(origMethod));
 | |
|         
 | |
| 
 | |
|         Method origMethod = class_getInstanceMethod([target class], origSEL);
 | |
| 
 | |
|         Method newMethod = class_getInstanceMethod([target class], newSEL);
 | |
|         
 | |
| 
 | |
|         if(class_addMethod([target class], origSEL, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))) {
 | |
|             
 | |
|             class_replaceMethod([target class], newSEL, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
 | |
|         } else {
 | |
| 
 | |
|             method_exchangeImplementations(origMethod, newMethod);
 | |
|         }
 | |
|     } else {
 | |
| 
 | |
|         class_addMethod([target class], origSEL, newIMP, method_getTypeEncoding(origMethod));
 | |
|     }
 | |
| }
 | |
| 
 | |
| @interface TABaseSyncData : NSObject<TAThirdPartySyncProtocol>
 | |
|  
 | |
| @property (nonatomic, weak) id<TAThinkingTrackProtocol> taInstance;
 | |
| @property (nonatomic, strong) NSDictionary *customPropety;
 | |
| @property (nonatomic, assign) BOOL isSwizzleMethod;
 | |
| 
 | |
| @end
 | |
| 
 | |
| NS_ASSUME_NONNULL_END
 |