不废话,看代码
//
// NSTimer+WeakTimer.h
// Copyright © 2018 YXFF. All rights reserved.
//
#import
NS_ASSUME_NONNULL_BEGIN
@interface NSTimer (WeakTimer)
+ (NSTimer *)scheduledWeakTimerWithTimeInterval:(NSTimeInterval)interval target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats;
@end
NS_ASSUME_NONNULL_END
//
// NSTimer+WeakTimer.m
// Copyright © 2018 YXFF. All rights reserved.
//
#import "NSTimer+WeakTimer.h"
@interface TimerWeakObject : NSObject
@property (nonatomic,weak) id target;
@property (nonatomic,assign) SEL selector;
@property (nonatomic,weak) NSTimer *timer;
- (void)fire:(NSTimer *)timer;
@end
@implementation TimerWeakObject
- (void)fire:(NSTimer *)timer {
if (self.target) {
if ([self.target respondsToSelector:self.selector]) {
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[self.target performSelector:self.selector withObject:timer.userInfo];
}
}else {
[self.timer invalidate];
}
}
@end
@implementation NSTimer (WeakTimer)
+ (NSTimer *)scheduledWeakTimerWithTimeInterval:(NSTimeInterval)interval target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats {
TimerWeakObject *object = [[TimerWeakObject alloc]init];
object.target = aTarget;
object.selector = aSelector;
object.timer = [NSTimer scheduledWeakTimerWithTimeInterval:interval target:object selector:@selector(fire:) userInfo:userInfo repeats:repeats];
return object.timer;
}
@end
欢迎纠错、留言、点赞