NSOperation og NSOperationQueue, Threading på en enkel måte

fredag, 8 januar, 2010

Alle som har jobbet med threading vet om alle problemene som kan oppstå og hvor vanskelig det kan være å feilsøke. Når en programmerer en iPhone applikasjon i Objective C vil en ofte få brukt for enkel threading for å unngå at GUI låser seg ved utførelse av diverse oppgaver. Det er her det er fint å vite at det finnes to objekter som heter NSOperation og NSOperationQueue.

Å lære seg hvordan disse to fungerer er utrolig enkelt. En kan for eksempel se på koden i ett eksempel hos Apple TopSongs eller lese klasse dokumentasjonen NSOperation. Personlig liker jeg å lese dokumentasjon å prøve ut selv, da dette gir en bedre forståelse av hvordan klassene fungerer.

Et lite eksempel

Bruker her NSInvocationOperation som er en sub klasse av NSOperation

@interface OperationViewController : UITableViewController {
	NSOperationQueue *operationQueue;
	NSInvocationOperation *operation;
}

@property (nonatomic, retain) NSOperationQueue *operationQueue;
@property (nonatomic, retain) NSInvocationOperation *operation;
#import "OperationViewController.h"

@implementation OperationViewController
@synthesize operationQueue;
@synthesize operation;

- (void)viewDidLoad {
	[super viewDidLoad];
	self.title = @"Operation";
	[operationQueue setMaxConcurrentOperationCount:1];
	operationQueue = [[NSOperationQueue alloc] init];
}

Om du nå skulle ønske å kjøre en operasjon i bakgrunn trenger du bare å legge til en NSInvocationOperation i NSOperationQueue

operation = [[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(runInBackground) object:nil] autorelease];

[self.operationQueue addOperation:operation];
Kategorier → iPhone

    Skriv en kommentar