NSTimer

由于创建计时器时候对象会把计时器保存起来,而计时器需要执行对应的方法也要把对象保存起来,这样就形成了一个保留环。解决方法就是创建一个分类给NSTimer添加一个方法,把所要执行的任务封装成块传进去,block中需要引入一个weakSelf才能避免循环引用,传入参数时要通过copy将block拷贝到堆上,代码如下:

@implementation NSTimer (ZJJTimer)

+(void)eoc_blockInvoke:(NSTimer *)timer{

void (^block)() = timer.userInfo;

if (block) {

block();

}

}

+(NSTimer *)eoc_scheduleTimerWithTimeInterval:(NSTimeInterval)interval block:(void(^)())block repeats:(BOOL)repeats{

return [self scheduledTimerWithTimeInterval:interval target:self selector:@selector(eoc_blockInvoke:) userInfo:[block copy] repeats:repeats];

}

你可能感兴趣的:(NSTimer)