123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- //
- // LineSDKJSONWebToken+RawString.m
- // XenonSDK
- //
- // Created by fq on 2021/1/21.
- // Copyright © 2021 SAGESSE. All rights reserved.
- //
- #import "LineSDKJSONWebToken+RawString.h"
- #import <objc/runtime.h>
- @implementation LineSDKJSONWebToken (RawString)
- + (void)load {
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- [self ty_swizzleInstanceMethod:@selector(initWithString:) with:@selector(ty_initWithString:)];
- });
- }
- - (instancetype)ty_initWithString:(NSString *)string {
- id instance = [self ty_initWithString:string];
- [instance ty_setAssociate:string withKey:@"rawString"];
- return instance;
- }
- - (NSString *)rawString {
- return [self ty_getAssociateWithKey:@"rawString"];
- }
- + (BOOL)ty_swizzleInstanceMethod:(SEL)oriSel with:(SEL)swiSel {
- Method oriMethod = class_getInstanceMethod(self, oriSel);
- Method swiMethod = class_getInstanceMethod(self, swiSel);
- if (!oriMethod || !swiMethod) return NO;
-
- class_addMethod(self,
- oriSel,
- class_getMethodImplementation(self, oriSel),
- method_getTypeEncoding(oriMethod));
- class_addMethod(self,
- swiSel,
- class_getMethodImplementation(self, swiSel),
- method_getTypeEncoding(swiMethod));
-
- method_exchangeImplementations(class_getInstanceMethod(self, oriSel),
- class_getInstanceMethod(self, swiSel));
- return YES;
- }
- //相当于 setValue:forKey 进行关联value对象
- - (void)ty_setAssociate:(id)obj withKey:(const void * _Nonnull)key {
- if (!key) {
- return;
- }
- objc_setAssociatedObject(self, key, obj, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
- }
- //用来读取对象
- - (id)ty_getAssociateWithKey:(const void * _Nonnull)key {
- if (!key) {
- return nil;
- }
- return objc_getAssociatedObject(self, key);
- }
- @end
|