保持指向本地对象的强指针

时间:2013-09-03 07:51:12

标签: ios objective-c

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

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

我想如果我有一个强大的指针,那么保持活着? 这是否意味着这不适用于在堆栈上分配的对象?

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

2 个答案:

答案 0 :(得分:1)

Objective-C中永远不会在堆栈上分配对象。然而,块是特殊的,因为它们是堆栈分配的。因此,如果要保留指向块的指针,则必须先使用Block_copy复制它并使用该副本,然后使用Block_release将其释放。如果要在声明的范围被销毁之后使用该块,则必须执行此操作。有关此问题的更多信息:https://developer.apple.com/library/mac/documentation/cocoa/Conceptual/Blocks/Articles/bxUsing.html(在“复制块”下)。尽管如此,这并不适用于常规对象。

答案 1 :(得分:1)

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

void (^stackBlock)() = [^(){
    NSLog(@"Hello world");
} copy];