ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-05-12 18:03:55  阅读:285  来源: 互联网

标签:target timer selector 循环 引用 NSTimer repeats userInfo


#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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有