objective-c - 复制 block (即 : copying them to instance variables) in Objective-C

标签 objective-c cocoa objective-c-blocks

我正在尝试理解 block 。当直接传递给方法时,我知道如何正常使用它们。我现在感兴趣的是获取一个 block ,将其存储(比如说)在一个实例变量中并稍后调用它。

block 编程指南听起来我可以通过使用 Block_copy/retain 来复制 block 来做到这一点,但是当我尝试运行它时我的程序崩溃了。

- (void) setupStoredBlock
{
    int salt = 42;
    m_storedBlock = ^(int incoming){ return 2 + incoming + salt; };
    [m_storedBlock retain];
}

我稍后尝试调用它:

- (void) runStoredBlock
{
    int outputValue = m_storedBlock(5);
    NSLog(@"When we ran our stored blockwe got back: %d", outputValue);
    [m_storedBlock release];
}

有人有什么见解吗? (或者,有什么我没有得到的 block 吗?)

非常感谢!

最佳答案

你会想要这样做:

- (void) setupStoredBlock
{
    int salt = 42;
    m_storedBlock = Block_copy(^(int incoming){ return 2 + incoming + salt; });
}

关于objective-c - 复制 block (即 : copying them to instance variables) in Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2659072/

相关文章:

iphone - NSBundle——在一个包中寻找资源?

objective-c - 为 Cocoa 应用程序创建导航屏幕

ios - 内部使用 self 的队列调用方法上的 weakSelf

objective-c - 通过dispatch_async block 传递可变参数

javascript - UIWebView 上的夜间模式问题

ios - UICollectionView重新加载数据问题

macos - 如何实现一个复杂的基于 NSDocument 的应用程序来导入和导出非 native 文件类型?

ios - 从缓存响应中停止 NSURLConnection sendAsynchronousRequest

objective-c - Xcode 7 和 IOS 9 中的 SpriteKit 问题

cocoa - 对 NSOutlineView 中的删除键使用react的适当方法是什么