NSOperation og NSOperationQueue, Threading på en enkel måte
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];



