objective-c - block 引用作为Objective-C中的实例变量

标签 objective-c objective-c-blocks

我想知道是否可以将匿名函数( block )的引用存储为 Objective-C 中的实例变量。

我知道如何使用委托(delegate)、目标 Action 等。我不是在谈论这个。

最佳答案

当然。

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 - block 引用作为Objective-C中的实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3230271/

相关文章:

iphone - 使用递归 block 时的 EXC_BAD_ACCESS

ios - 为什么将UIViewController释放在主线程上?

iOS: block 、主队列和循环保留

iphone - 椭圆的周围区域是黑色的。为什么?

ios - MKDirections 计算ETAWithCompletionHandler : in background state

objective-c - NSNotificationCenter 作用域定义

ios - 在几个应用程序中用新的 Swift 替换旧的 Objective-c 库

objective-c - Cocoa中窗口的圆角渐变背景

ios - "Missing __block type specifier"重构代码后编译错误但重构前正常

ios - 后台 performFetchWithCompletionHandler 使用 Blocks 导致崩溃