6.12. Running Tasks Synchronously with Operations

Problem

You want to run a series of tasks synchronously.

Solution

Create operations and start them manually:

#import <UIKit/UIKit.h>

@interface Running_Tasks_Synchronously_with_OperationsAppDelegate
           : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, strong) NSInvocationOperation *simpleOperation;

@end

The implementation of the application delegate is as follows:

- (void) simpleOperationEntry:(id)paramObject{
  
  NSLog(@"Parameter Object = %@", paramObject);
  NSLog(@"Main Thread = %@", [NSThread mainThread]);
  NSLog(@"Current Thread = %@", [NSThread currentThread]);
  
}

- (BOOL)            application:(UIApplication *)application
  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
  
  NSNumber *simpleObject = [NSNumber numberWithInteger:123];
  
  self.simpleOperation = [[NSInvocationOperation alloc]
                          initWithTarget:self
                          selector:@selector(simpleOperationEntry:)
                          object:simpleObject];
  
  [self.simpleOperation start];
  
  self.window = [[UIWindow alloc] initWithFrame:
                 [[UIScreen mainScreen] bounds]];
  self.window.backgroundColor = [UIColor whiteColor];
  [self.window makeKeyAndVisible];
  return YES;
}

The output of this program (in the console window) will be similar to this:

Parameter Object = 123
Main Thread = <NSThread: 0x6810280>{name = (null), num = 1}
Current Thread = <NSThread: 0x6810280>{name = (null), num = 1}

As the name of this class implies (NSInvocationOperation), the main responsibility of an object of ...

Get iOS 6 Programming Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.