ios验证码发送次数过多(iOSNSProxyRuntime)
NSProxy是一个抽象类,它并没有继承NSObject,它实现了NSObject协议,可以利用NSProxy Runtime 解决循环引用的问题,接下来我们就来聊聊关于ios验证码发送次数过多?以下内容大家不妨参考一二希望能帮到您!
ios验证码发送次数过多
NSProxy是一个抽象类,它并没有继承NSObject,它实现了NSObject协议,可以利用NSProxy Runtime 解决循环引用的问题
其实现如下:
#import "HCQProxy.h"
@interface HCQProxy()
@property(nonatomic, weak)NSObject* target;
@end
@implementation HCQProxy
#pragma mark - NSProxy 没有初始化方法,需要手动实现
- (instancetype)initWithTarget:(NSObject*)target {
_target = target;
return self;
}
(instancetype)proxyWithTarget:(id)target {
HCQProxy* proxy = [[HCQProxy alloc]initWithTarget:target];
return proxy;
}
#pragma mark - 获得方法的方法签名
-(NSMethodSignature*)methodSignatureForSelector:(SEL)sel {
NSMethodSignature* signature =
(_target) ? [_target methodSignatureForSelector:sel] : [super methodSignatureForSelector:sel] ;
return signature;
}
#pragma mark - 为调用设置目标
-(void)forwardInvocation:(NSInvocation *)invocation {
if(!_target) return;
[invocation invokeWithTarget:_target];
}
@end
写了例子验证一下
#import "UserViewController.h"
@import HCQProxy.HCQProxy;
@interface UserViewController ()
@property(nonatomic,strong)NSTimer* timer;
@end
static int count;
@implementation UserViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.titleS = @"用户中心";
self.leftBtnClickHandler = ^(id _Nullable target) {
UserViewController* vc = (UserViewController*)target;
[vc.navigationController popViewControllerAnimated:YES];
};
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:[HCQProxy proxyWithTarget:self] selector:@selector(doSomething) userInfo:nil repeats:YES];
}
-(void)doSomething {
NSLog(@"count = %d",count );
}
-(void)dealloc {
//NSLog(@"%s %@",__func__,_timer);
if(_timer) {
[_timer invalidate];
_timer = nil;
}
//NSLog(@"%s %@",__func__,_timer);
}
@end
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com