Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.


From The Apple Wiki
Private Framework
Availabile3.0 – present
Class PrefixAK

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.

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

@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);
  [lock lock];
  [lock unlockWithCondition:[lock condition]+1];
  printf("Worker %d has done.\n", actor_id);

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;