其他分享
首页 > 其他分享> > NSTimer弱引用,解决循环引用无法释放问题

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*10 target:self selector:@selector(sendMailRetry) userInfo:nil repeats:YES];

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

 

标签:target,timer,selector,循环,引用,NSTimer,repeats,userInfo
来源: https://www.cnblogs.com/HJiang/p/16263528.html