将对象绑定到块

时间:2011-11-23 04:26:12

标签: objective-c memory-management objective-c-blocks

我有以下对象:

Someobject *Object = [[Someobject alloc] init];

void (^Block)() = ^()
{
    Use(Object);
};

DoSomethingWith(Block);

该块被复制到DoSomethingWith并存储在某处。它可能不被调用,被调用一次或被多次调用。我想将Object与块绑定,因此每当释放块或其任何副本时,Object都会被释放,并且只要保留或复制块或其任何副本,{{1}将保留。
有办法吗?

1 个答案:

答案 0 :(得分:3)

将第一行更改为[[[Someobject alloc] init] autorelease],您就完成了。

Blocks保留在其体内声明的对象并在其体内引用,并在发布时释放它们。因此DoSomethingWith内的块副本也是如此。假设副本最终被释放,那么就没有泄漏。这很酷。

(例外:如果Object被声明__block Someobject *Object,以及预期的效果(删除块的私有引用的'const',允许块分配给Object),这种自动恢复行为也被关闭。在这种情况下,保留/释放是你的责任。)