#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.
网友评论