美文网首页
iOS 自定义NSTimer,解决析构问题

iOS 自定义NSTimer,解决析构问题

作者: 星之夜下 | 来源:发表于2020-03-08 13:42 被阅读0次

思路:通过定义中间变量,解决内部的强引用问题。这样就可以解决了很多麻烦,使用起来也相对方便。

#import "MyTimer.h"

@interface MyTimer()

@property(nonatomic,weak) id target;

@property(nonatomic,assign) SEL aselector;

@property(nonatomic,strong) NSTimer *mtimer;

@end

@implementation MyTimer

+ (instancetype)my_scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo{

    return [[MyTimer alloc] initScheduledTimerWithTimeInterval:ti target:aTarget selector:aSelector userInfo:userInfo repeats:yesOrNo];

}

- (instancetype)initScheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo{

    if(self== [superinit]) {

        self.target= aTarget;

        self.aselector= aSelector;

        self.mtimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(myTimerfunc) userInfo:nil repeats:YES];

    }

    return self;

}

-(void)myTimerfunc{

#pragma clang diagnostic push

#pragma clang diagnostic ignored"-Warc-performSelector-leaks"

   NSLog(@"---myTimerfunc");

    if ([self.target respondsToSelector:self.aselector]) {

        [self.targetperformSelector:self.aselector];

    }

#pragma clang diagnostic pop

}

-(void)timer_invalidate{

    [self.mtimer invalidate];

    self.mtimer=nil;

}

@end


在UIViewController中的使用:

-(void)timerInit{

    self.mtimer1 = [MyTimer my_scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(myTimerfunc) userInfo:nil repeats:YES];

}

-(void)myTimerfunc{

    NSLog(@"---myTimerfunc");

}

- (void)dealloc

{

    NSLog(@"---- %s",__func__);

    [self.mtimer1 timer_invalidate];

}

相关文章

  • iOS 自定义NSTimer,解决析构问题

    思路:通过定义中间变量,解决内部的强引用问题。这样就可以解决了很多麻烦,使用起来也相对方便。 #import "M...

  • iOS NSTimer 的使用 -- 解决强引用的问题

    NSTimer 的使用 ,主要是解决它在项目里使用时,经常导致的析构问题。直接上代发,比较简单。 #pragma ...

  • 2.0 C++远征:虚析构函数

    2-4虚析构函数 [TOC] 1.为什么引进虚析构函数? 多态中存在的问题:内存泄漏。为了解决内存泄漏的问题,引入...

  • 6.0 C++远征:析构函数

    析构函数 1.定义格式: ​ ~类名() 2.注意: ​ (1)如果没有自定义的析构函数,则系统自动生成;...

  • iOS 性能优化

    1.NSTimer 处理方式:viewController销毁的时候会调用析构函数,在delloc时处理 需要在视...

  • 如何写C++基类析构函数?

    可以看到,派生类的析构函数没有被调到。解决方法是,在基类的析构函数前加virtual。

  • ios中循环引用问题

    ios中循环引用问题 NO1: NSTimer 问题:当你创建使用NSTimer的时候,NSTimer会默...

  • 说说 NSTimer 的新 API

    在以往的 iOS 版本中,我们为了避免 NSTimer 的循环引用问题,一个比较常用的解决办法是为 NSTimer...

  • swift3语法(十二)

    析构过程 析构器析构器只适用于类类型,当一个类的实例被释放之前,析构器会被立即调用。析构器用关键字deinit来标...

  • Swift5.1构造过程&析构过程

    14.构造过程 构造过程 15.构析过程 析构过程原理析构过程:析构器只适⽤于类类型,当一个类的实例被释放之前,析...

网友评论

      本文标题:iOS 自定义NSTimer,解决析构问题

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