objective-C的shared_ptr / weak_ptr实现

时间:2012-05-27 00:51:35

标签: objective-c memory-management raii reference-counting

注意到当前Objective-C中引用计数的实现有多糟糕(请参阅herehere),我确信必须有一个库提供与c ++类似的内容{{1} }和shared_ptr语义没有对weak_ptrretain进行的那些荒谬的额外调用,当(指针)变量超出范围时应该自动调用

ObjC可以吗?我知道ObjC没有析构函数,因此当变量超出范围时无法自动调用某些内容,但这些release / retain调用如何真正必要?我是以错误的方式绕过这个?

2 个答案:

答案 0 :(得分:9)

  

注意到当前Objective-C中的引用计数实施得有多糟糕......

我对此有疑问。这是严重执行。只是不熟悉它。 认为这是非常简单的,因为你必须知道几条规则。所以不要因为你不熟悉而敲门。

  

ObjC可以吗?

是的,这是可能的。它被称为ARC(“自动参考计数”)。有关详细信息,请参阅“Transitioning to ARC Release Notes”。

  

我知道ObjC没有析构函数

实际上确实如此。这就是-dealloc方法。

  

......当变量超出范围时

关于Objective-C的理解是对象不会超出范围,因为对象只能在堆上分配(<插入关于非复制块的正常警告> )。指向这些对象(即变量)的指针可以进出范围,但是对象本身始终在范围内,因为堆在技术上被视为范围内的全局。 (只是如果你丢失了一个物体的地址,它几乎不可能再找到它)

答案 1 :(得分:2)

由ARC负责。除了ARC之外,没有一个好的方法可以做到这一点。在C ++中,您有堆栈对象,您可以重载赋值(=)和deference( - >)。两者都是共享指针所必需的。 Niether可以在目标C中完成。