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 に答える