如果我有一个返回块的类函数,我是否需要对块的内存管理做任何事情?
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会在这种情况下处理所有事情?
谢谢
答案 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;
};
}