Copying blocks (ie: copying them to instance variables) in Objective-C

Posted by RyanWilcox on Stack Overflow See other posts from Stack Overflow or by RyanWilcox
Published on 2010-04-17T16:19:43Z Indexed on 2010/04/17 16:23 UTC
Read the original article Hit count: 241

Filed under:
|

I'm trying to understand blocks. I get how to use them normally, when passed directly to a method. I'm interested now in taking a block, storing it (say) in an instance variable and calling it later.

The blocks programming guide makes it sound like I can do this, by using Block_copy / retain to copy the block away, but when I try to run it I crash my program.

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

I try to call it later:

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

Anyone have any insights? (Or, is there something I'm not getting with blocks?)

Thank you very much!

© Stack Overflow or respective owner

Related posts about cocoa

Related posts about objective-c