ActorKit.framework/fr

From iPhone Development Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
ActorKit.framework/fr
Private Framework
Availabile 3.0 – present
Class Prefix AK
Headers [headers.cynder.me]

Languages: English • français

ActorKit est une implémentation Apple basée sur l'Objective-C pour la programmation orientée objet.

Cela est utilisé dans DataAccess.framework, Message.framework et searchd.

Exemple d'usage

#import <ActorKit/ActorKit.h>

// You must provide a protocol on the messages that the actor can receive.
@protocol SlowActor
-(oneway void)doWorkWithConditionLock:(NSConditionLock*)lock;  // oneway is important here. Without it, calls will be synchronous.
@end


@interface SlowActor : AKActor<SlowActor> {
  int actor_id;
}
-(id)initWithID:(int)_id;
-(oneway void)doWorkWithConditionLock:(NSConditionLock*)lock;
@end


@implementation SlowActor
-(id)initWithID:(int)_id {
  if ((self = [super init]))
    actor_id = _id;
  return self;
}
-(oneway void)doWorkWithConditionLock:(NSConditionLock*)lock; {
  printf("Worker %d is doing work...\n", actor_id);
  usleep(actor_id*actor_id*100000);
  [lock lock];
  [lock unlockWithCondition:[lock condition]+1];
  printf("Worker %d has done.\n", actor_id);
}
@end



int main () {
  NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
  
  SlowActor* actors[10];
  for (unsigned i = 0; i < 10; ++ i)  {
    actors[i] = [[[SlowActor alloc] initWithID:i] autorelease];
    // You must call -startThreadDispatchQueue before sending any works to the actors.
    [actors[i] startThreadDispatchQueue];
  }
    
  NSConditionLock* lock = [[NSConditionLock alloc] initWithCondition:0];
  
  for (unsigned i = 0; i < 10; ++ i)
    // Use -send to obtain the actor's mailbox. Send messages to their mailboxes to allow asynchronous messages.
    [[actors[i] send] doWorkWithConditionLock:lock];
  
  printf("Waiting for all workers...\n");
  
  [lock lockWhenCondition:10];
  [lock unlock];
  
  printf("All workers done...\n");

  [pool drain];
  
  return 0;
}

Référence