7.17. Exiting Threads and Timers
Problem
You would like to stop a thread or a timer, or prevent one from firing again.
Solution
For timers, use the invalidate instance method of NSTimer. For threads, use the cancel method. Avoid using the exit method of threads, as it does not give
the thread a chance to clean up after itself, and your application will
end up leaking resources:
NSThread*thread=/* Get the reference to your thread here */;[threadcancel];NSTimer*timer=/* Get the reference to your timer here */;[timerinvalidate];
Discussion
Exiting a timer is quite straightforward; you can simply call the
timer’s invalidate instance method.
After you call that method, the timer will not fire any more events to
its target object.
However, threads are a bit more complicated to exit. When a thread
is sleeping and its cancel method is
called, the thread’s loop will still perform its task fully before
exiting. Let me demonstrate this for you:
-(void)threadEntryPoint{@autoreleasepool{NSLog(@"Thread Entry Point");while([[NSThreadcurrentThread]isCancelled]==NO){[NSThreadsleepForTimeInterval:4];NSLog(@"Thread Loop");}NSLog(@"Thread Finished");}}-(void)stopThread{NSLog(@"Cancelling the Thread");[self.myThreadcancel];NSLog(@"Releasing the thread");self.myThread=nil;}-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions{self.myThread=[[NSThreadalloc]initWithTarget:selfselector:@selector(threadEntryPoint ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access