0

如果您向其发送消息,则基于堆栈的对象不会被复制到堆中retain;收到邮件后才会复制。请copy解释。

4

1 回答 1

1

大多数对象都是在堆上分配的,它们的生命周期取决于它们获得的保留和释放次数。但是块是一种特殊的对象,通常分配在堆栈上。这意味着当堆栈帧被弹出时(例如当你的函数返回时),块的内存将被覆盖。发送基于堆栈的块retain不会将其转换为基于堆的对象,因此即使您保留它,它仍然可以被覆盖。将块保留在函数末尾的唯一方法是copy它,它将副本放在堆上。

于 2013-05-23T21:26:36.067 回答