-1

注意到当前 Objective-C 中引用计数的实现有多糟糕(请参见此处此处),我确信那里必须有一个库提供类似于 c++shared_ptrweak_ptr语义的东西,而没有所有那些荒谬的额外调用,retain并且release应该自动调用当(指针)变量超出范围时

这在 ObjC 上可行吗?我知道 ObjC 没有析构函数,因此当变量超出范围时无法自动调用某些东西,但是这些retain/release调用怎么可能真的有必要呢?我会以错误的方式解决这个问题吗?

4

2 回答 2

9

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

我对此有异议。它的实施并不差。只是对它不熟悉。 认为这真的很简单,因为你只需要知道几条规则。所以不要因为你不熟悉就敲它。

这在 ObjC 上可行吗?

是的,这是可能的。它被称为 ARC(“自动引用计数”)。有关详细信息,请参阅“过渡到 ARC 发行说明”。

我知道 ObjC 没有析构函数

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

...当变量超出范围时

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

于 2012-05-27T01:01:30.100 回答
2

这由 ARC 负责。除了 ARC,没有真正的好方法。在 C++ 中,您有堆栈对象,并且可以重载赋值 (=) 和遵从 (->)。共享指针都需要两者。Niether 可以在目标 C 中完成。

于 2012-05-27T01:01:47.290 回答