web-dev-qa-db-fra.com

Bloquer les références comme une instance vars dans l'objectif-c

Je me demandais s'il est possible de stocker une référence à une fonction anonyme (bloc) comme une variable d'instance dans l'objectif-c.

Je sais comment utiliser la délégation, l'action de la cible, etc. Je ne parle pas de cela.

44
Jacob Relkin

Sûr.

typedef void(^MyCustomBlockType)(void);

@interface MyCustomObject {
  MyCustomBlockType block;
}
@property (nonatomic, copy) MyCustomBlockType block; //note: this has to be copy, not retain
- (void) executeBlock;
@end

@implementation MyCustomObject
@synthesize block;

- (void) executeBlock {
  if (block != nil) {
    block();
  }
}

- (void) dealloc {
  [block release];
  [super dealloc];
}
@end

//elsewhere:

MyCustomObject * object = [[MyCustomObject alloc] init];
[object setBlock:^{
  NSLog(@"hello, world!");
}];

[object executeBlock];
[object release];
86
Dave DeLong