从函数返回的块的内存管理

时间:2012-11-05 18:09:27

标签: objective-c

如果我有一个返回块的类函数,我是否需要对块的内存管理做任何事情?

typedef BOOL (^Block)(ParamType* param);


+ (Block) makeBlock: (SeedParamType* seed)
{
    return ^BOOL (ParamType* param)
    {
        // do something with seed
        return someBoolVal;
    };
}


@interface SomeClass() 
@property (copy, nonatomic) Block                 theBlock;
@end

我是否需要在内存管理方面做明确的事情,或者ARC会在这种情况下处理所有事情?

谢谢

2 个答案:

答案 0 :(得分:2)

假设手动保留/释放,该代码无效。您需要返回块的副本。你甚至可以这样做:

+ (Block) makeBlock: (SeedParamType* seed)
{
    return [[^BOOL (ParamType* param)
    {
        // do something with seed
        return someBoolVal;
    } copy] autorelease];
}

答案 1 :(得分:2)

使用ARC,你会没事的。有足够的信息让它知道如何管理它。

语法虽然有点不对,但应该是:

+ (Block) makeBlock: (SeedParamType*) seed
{
    return ^BOOL (ParamType* param)
    {
        // do something with seed
        return someBoolVal;
    };
}