1

我在正在阅读的一本书中遇到了这件事,这让我思考:

“当你分配一个块时,它是在堆栈上创建的。这意味着,即使你要保持对它的强引用,稍后调用它也会导致崩溃,因为一旦你离开内存就会被破坏定义它的方法。”

我想如果我有一个指向某个东西的强指针,它会保持活力吗?这是否意味着这不适用于堆栈上分配的对象?

我试图想一个不使用块的例子......(例如,指针 - 可能是指向堆栈分配对象的 ivar - 即使指针是活动的也会被破坏)

4

2 回答 2

1

在 Objective-C 中,对象永远不会在堆栈上分配。然而,块是特殊的,因为它们是堆栈分配的。所以如果你想保留一个指向一个块的指针,你必须先用 using 复制它,Block_copy并使用该副本,然后用 .release 释放它Block_release。如果要在声明它的范围被销毁后使用该块,则必须这样做。更多关于此事的信息: https ://developer.apple.com/library/mac/documentation/cocoa/Conceptual/Blocks/Articles/bxUsing.html (在“复制块”下)。再一次,这不适用于常规对象。

于 2013-09-03T08:12:42.803 回答
1

块可以像对象一样发送消息。要将它们从堆栈移动到堆,只需“复制”它们。

void (^stackBlock)() = [^(){
    NSLog(@"Hello world");
} copy];
于 2013-09-03T08:13:30.650 回答