3

如果我有一个返回块的类函数,我需要在块的内存管理方面做任何事情吗?

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 会在这种情况下处理所有事情?

谢谢

4

2 回答 2

2

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

+ (Block) makeBlock: (SeedParamType* seed)
{
    return [[^BOOL (ParamType* param)
    {
        // do something with seed
        return someBoolVal;
    } copy] autorelease];
}
于 2012-11-05T18:14:22.487 回答
2

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

语法有点错误,应该是:

+ (Block) makeBlock: (SeedParamType*) seed
{
    return ^BOOL (ParamType* param)
    {
        // do something with seed
        return someBoolVal;
    };
}
于 2012-11-05T18:21:32.407 回答