objective c - UIView contains NSTimer - not releasing -


i'm using 1 uiview subclass has caanimation performed after performsegue class. in uiview class, i'm using cadisplaylink , nstimer increment catextlayer used in animation. whenever, came previous view controller after running animation, keeps on running in background. when go view controller animation playing, shows me incorrect count. there wrong code ?

in .h file,

@property (assign,nonatomic) cftimeinterval duration; @property (nonatomic,strong) nstimer *tim1; @property (nonatomic,strong) nstimer *tim2; @property (nonatomic,strong) nstimer *tim3; @property (nonatomic,strong) nstimer *startup; @property (nonatomic,strong) nstimer *starter; @property (nonatomic,strong) nstimer *suspender; @property (nonatomic,strong) nstimer *humansum; @property (nonatomic,strong) nstimer *transportsum; @property (nonatomic,strong) nstimer *wastesum; @property (nonatomic,strong) nstimer *watersum; @property (nonatomic,strong) nstimer *energysum; @property (nonatomic,strong) nstimer *humanslowsum; @property (nonatomic,strong) nstimer *transportslowsum; @property (nonatomic,strong) nstimer *wasteslowsum; @property (nonatomic,strong) nstimer *waterslowsum; @property (nonatomic,strong) nstimer *energyslowsum; @property (nonatomic,strong) cadisplaylink  *displaylink; 

in .m file, //below code called inside method

displaylink = [cadisplaylink displaylinkwithtarget:self selector:@selector(tick:)]; [displaylink addtorunloop:[nsrunloop currentrunloop] formode:nsdefaultrunloopmode];  - (void)tick:(cadisplaylink *)sender {     duration = sender.duration;  startup=[nstimer scheduledtimerwithtimeinterval:(2+(0.05*duration)) target:self selector:@selector(calltheanimating_function) userinfo:nil repeats:no];   if(initil==yes){         //             humansum  =[nstimer scheduledtimerwithtimeinterval:(15.4+(0.05*duration)) target:self selector:@selector(sum1) userinfo:nil repeats:yes];     }     else{         humansum  =[nstimer scheduledtimerwithtimeinterval:13.4 target:self selector:@selector(sum1) userinfo:nil repeats:yes];     } 

in sum1 method,

-(void)sum1{     nslog(@"hvalue %f",humanvalue);     num11=humanvalue;//     catextlayer *humanscore=self.layers[@"humanscore"];     humanscore.string=@"0";     actualtext=0;     tmep=0;         humanslowsum =[nstimer scheduledtimerwithtimeinterval:(0.7/(0.7*num11)) target:self selector:@selector(final1) userinfo:nil repeats:yes];  } 

for implementing ease out function, i'm using 75% of increment fast , 25% increment slow mentioned in requirement.

-(void)final1{     if(tmep<round(num11)){         tmep++;         catextlayer *t=self.layers[@"stepscore"];         int m=[t.string intvalue];         m++;         t.string=[nsstring stringwithformat:@"%d",m];         catextlayer *humanscore=self.layers[@"humanscore"];         actualtext++;         humanscore.string=[nsstring stringwithformat:@"%d",actualtext];         nslog(@"%d",m);     }     else{         [humanslowsum  invalidate];     } } 

this timer keeps running though if invalidate timer, remove view superview inside dealloc() method. please me issue.

finally, found answer simple method. creating iboutlet of uiview subview inside super view , invalidating nstimer(s) on there while performing segue.


Comments

Popular posts from this blog

javascript - jQuery: Add class depending on URL in the best way -

caching - How to check if a url path exists in the service worker cache -

Redirect to a HTTPS version using .htaccess -