阻止引用作为Objective-C中的实例variables

我想知道是否有可能在Objective-C中存储对匿名函数(块)的引用作为实例variables。

我知道如何使用委托,目标行动等。我不是在谈论这个。

当然。

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]; 

是的,你当然可以存储对Objective-C块(副本)的引用。 variables声明有点毛茸茸的,像C函数指针,但除此之外,这是没有问题的。 对于需要和id并返回void的块:

 typedef void (^MyActionBlockType)(id); @interface MyClass : NSObject { } @property (readwrite,nonatomic,copy) MyActionBlockType myActionBlock; @end 

会做的伎俩。