Nstimer as a common class, but there is one of the biggest disadvantage, is that it will be strong reference to target, causing the call timer is very troublesome, a little careless to cause a memory leak.
The following is a package for solving this problem.
Directly on the code:
#import <Foundation/Foundation.h>
@interface Lzltimer: NSObject
-(void) Starttimerinterval: ( Nstimeinterval ) ti target:atarget selector: (SEL) selector userInfo: (ID) userInfo repeats: ( BOOL) Yesorno;
@end
#import "LZLTimer.h"
@interface Lzlweaktimertarget: NSObject
@property (nonatomic,weak) ID Target;
@property (nonatomic,assign) SEL selector;
-(void) Timerdidfire: ( Nstimer *) timer;
@end
@implementation Lzlweaktimertarget
-(void) Timerdidfire: ( Nstimer *) Timer {
if(_target) {
// eliminate arc warning
imp imp = [_targetmethodforselector:_selector< /c7>];
if ([nsstringfromselector(_selector) Hassuffix : @":" ]) {
void (*func) (ID,SEL, ID) = ( C9>void *) imp;
func (_target,_selector, timer);
}else {
void (*func) (ID,SEL) = (void *) imp ;
func (_target,_selector);
}
} else {
[Timer invalidate];
}
}
@end
@interface LZL Timer () {
nstimer *_timer;
}
@end
@implementation Lzltimer
-(void) dealloc {
if (_timer!=nil) {
[_timerinvalidate];
_timer =nil;
}
}
-(void) Starttimerinterval: ( Nstimeinterval ) ti target:atarget selector: (SEL) selector userInfo: (ID) userInfo repeats: ( BOOL) Yesorno {
if (nil = =_timer) {
wmweaktimertarget *weaktarget = [[wmweaktimertargetal Loc] init];
Weaktarget. Target = Atarget;
Weaktarget. selector = selector;
_timer = [nstimer scheduledtimerwithtimeinterval : Titarget: weaktarget selector:@selector( Timerdidfire:)userInfo: UserInfo repeats: Yesorno];
}
}
@end
Nstimer to dismiss a circular reference