Are Objective-C blocks autoreleased?

前端 未结 1 1006
情歌与酒
情歌与酒 2021-02-08 08:58

If I declare a block like this ^{ DoSomething; } and put it in an instance variable, do I need to Block_copy() if I\'m going to keep it around?

1条回答
  •  無奈伤痛
    2021-02-08 09:19

    Yes, you need to copy. Not because they are autoreleased, but because they start on the stack. Note that blocks also behave like regular Objective-C objects, so that you can copy them using the regular copy message:

    void storeBlockForLater: (dispatch_block_t) block
    {
        [someArray addObject:[[block copy] autorelease]];
    }
    

    Or, if you have a block property:

    @property(copy) dispatch_block_t block;
    

    Retaining does not help here.

    0 讨论(0)
提交回复
热议问题