我有以下对象:
Someobject *Object = [[Someobject alloc] init];
void (^Block)() = ^()
{
Use(Object);
};
DoSomethingWith(Block);
该块被复制到DoSomethingWith
并存储在某处。它可能不被调用,被调用一次或被多次调用。我想将Object
与块绑定,因此每当释放块或其任何副本时,Object
都会被释放,并且只要保留或复制块或其任何副本,{{1}将保留。
有办法吗?
答案 0 :(得分:3)
将第一行更改为[[[Someobject alloc] init] autorelease]
,您就完成了。
Blocks保留在其体内声明的对象并在其体内引用,并在发布时释放它们。因此DoSomethingWith
内的块副本也是如此。假设副本最终被释放,那么就没有泄漏。这很酷。
(例外:如果Object
被声明__block Someobject *Object
,以及预期的效果(删除块的私有引用的'const',允许块分配给Object
),这种自动恢复行为也被关闭。在这种情况下,保留/释放是你的责任。)