NSTimer+WeakTimer(解决循环引用分类)

不废话,看代码

//
//  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

欢迎纠错、留言、点赞

你可能感兴趣的:(NSTimer+WeakTimer(解决循环引用分类))