为什么必须复制块而不保留?什么时候不需要复制块?

Boo*_*oon 4 block ios objective-c-blocks

为什么必须复制块而不保留?引擎盖下的两个有什么区别?在什么条件下你不需要复制块,如果有的话?

Tom*_*ton 6

通常当你分配一个类的实例时,它会进入堆中并坚持下去,直到它被解除分配.但是如果你用代码声明一个内联块,它就会进入堆栈.当堆栈帧消失时,块实例也会消失 - 除非你复制它,这会创建一个堆驻留实例.基本上,如果要在弹出堆栈帧后继续使用块,则需要在某处复制.