Friday, April 19, 2013

NSThread threadDictionary example objc

Following code shows an example of  NSThread threadDictionary method. It uses NSThread threadDictionary to set some value for key to indicated whether to exit the thread or not.

Example - threadDictionary
- (void) myThreadMain{
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

    BOOL exitNow = NO;
    NSRunLoop* runLoop = [NSRunLoop currentRunLoop];

    // Add the exitNow BOOL to the thread dictionary.                               
    NSMutableDictionary* threadDict = [[NSThread currentThread] threadDictionary];
    [threadDict setValue:[NSNumber numberWithBool:exitNow] forKey:@"ThreadShouldExitNow"];

    // Install an input source.                                                                                                                                                                                                                                               
//  [self myInstallCustomInputSource];                                                                                                                                                                                                                                        

    while (!exitNow)
    {
        // Do one chunk of a larger body of work here.                                                                                                                                                                                                            

        // Run the run loop but timeout immediately if the input source isn't waiting to fire.                                                                                                                                                                                
        [runLoop runUntilDate:[NSDate date]];

        // Check to see if an input source handler changed the exitNow value.                                                                                                                                                                                                 
        exitNow = [[threadDict valueForKey:@"ThreadShouldExitNow"] boolValue];
    }

    [pool release];
}