objective c - Correct way to display current date/time in iOS app and keep it up to date -
i'm wondering out of theory/performance side of things, if needed display current date/time in uilabel or something, , keep date (say, down minute), correct way so?
i've seen various examples online of "clock" apps have recursive method runs 1 second delay between invocations. option create repeatable timer , add run loop. there variety of other ways well. there 1 way better others?
the recursive method not great idea.
use nstimer
approach. create repeating timer in viewdidappear
, invalidate
timer in viewdiddisappear
(to avoid retain cycle, a.k.a. strong reference cycle). example, assuming have timer
property:
@property (nonatomic, strong) nstimer *timer;
you schedule , invalidate timer follows:
- (void)viewdidappear:(bool)animated { [super viewdidappear:animated]; self.timer = [nstimer scheduledtimerwithtimeinterval:1.0 target:self selector:@selector(handletimer:) userinfo:nil repeats:yes]; } - (void)viewdiddisappear:(bool)animated { [super viewwilldisappear:animated]; [self.timer invalidate]; self.timer = nil; } - (void)handletimer:(nstimer *)timer { // update label here }
if don't release and/or invalidate
timer, maintain strong reference controller , can end strong reference cycle. , cannot resolve strong reference cycle in dealloc
(because dealloc
not called until controller has no more strong references; presence of repeating nstimer
has not been invalidated prevent dealloc
ever getting called), why in viewdiddisappear
.
Comments
Post a Comment