美文网首页
NSTimer弱引用,解决循环引用无法释放问题

NSTimer弱引用,解决循环引用无法释放问题

作者: 守正出奇HJ | 来源:发表于2022-05-11 18:22 被阅读0次

NSTimer弱引用,解决循环引用无法释放问题

#import <Foundation/Foundation.h>

/**

Timer 间接事件目标代理

*/

@interface WeakTimerTarget : NSObject

@property (nonatomic, weak) id target;

@property (nonatomic, assign) SEL selector;

@property (nonatomic, weak) NSTimer* timer;

+ (NSTimer *) scheduledTimerWithTimeInterval:(NSTimeInterval)interval

                                      target:(id)aTarget

                                    selector:(SEL)aSelector

                                    userInfo:(id)userInfo

                                    repeats:(BOOL)repeats;

@end

#import "WeakTimerTarget.h"

@implementation WeakTimerTarget

+ (NSTimer *) scheduledTimerWithTimeInterval:(NSTimeInterval)interval

                                      target:(id)aTarget

                                    selector:(SEL)aSelector

                                    userInfo:(id)userInfo

                                    repeats:(BOOL)repeats {

    WeakTimerTarget *timerTarget = [[WeakTimerTarget alloc] init];

    timerTarget.target = aTarget;

    timerTarget.selector = aSelector;

    timerTarget.timer = [NSTimer scheduledTimerWithTimeInterval:interval

                                                        target:timerTarget

                                                      selector:@selector(fire:)

                                                      userInfo:userInfo

                                                        repeats:repeats];

    return timerTarget.timer;

}

- (void)fire:(NSTimer *)timer{

    if(self.target) {

        [self.target performSelector:self.selector withObject:timer.userInfo];

    } else {

        [self.timer invalidate];

    }

}

- (void)dealloc{

    NSLog(@"%s",__func__);

}

@end

调用:

NSTimer *sendMailRetryTimer = [WeakTimerTarget scheduledTimerWithTimeInterval:60*10target:self selector:@selector(sendMailRetry) userInfo:nil repeats:YES];

主要隔离timer引用的Target不为self.

相关文章

网友评论

      本文标题:NSTimer弱引用,解决循环引用无法释放问题

      本文链接:https://www.haomeiwen.com/subject/bikeurtx.html