Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 把一个物体绑在一块木头上_Objective C_Memory Management_Objective C Blocks - Fatal编程技术网

Objective c 把一个物体绑在一块木头上

Objective c 把一个物体绑在一块木头上,objective-c,memory-management,objective-c-blocks,Objective C,Memory Management,Objective C Blocks,我的目标如下: Someobject *Object = [[Someobject alloc] init]; void (^Block)() = ^() { Use(Object); }; DoSomethingWith(Block); 块被复制到DoSomethingWith中并存储在某处。它可能不会被调用、调用一次或调用多次。我想将对象与块绑定,这样无论何时块或其任何副本被释放,对象被释放,无论何时块或其任何副本被保留或复制,对象都将被保留。 有办法吗?将第一行更改为[[[S

我的目标如下:

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

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

DoSomethingWith(Block);
块被复制到
DoSomethingWith
中并存储在某处。它可能不会被调用、调用一次或调用多次。我想将
对象
与块绑定,这样无论何时块或其任何副本被释放,
对象
被释放,无论何时块或其任何副本被保留或复制,
对象
都将被保留。

有办法吗?

将第一行更改为
[[[Someobject alloc]init]autorelease]

块保留在其主体中未声明和引用的对象,并在释放时释放它们。在
DoSomethingWith
内制作的块副本也将如此。假设拷贝最终被释放,就不会有泄漏。很酷

(例外:如果
对象
被声明为
\u block Someobject*对象
,以及预期效果(删除块的私有引用的“const”,允许块分配给
对象
),此自动重置行为也将关闭。在这种情况下,保留/释放再次由您负责。)