注意到当前 Objective-C 中引用计数的实现有多糟糕(请参见此处和此处),我确信那里必须有一个库提供类似于 c++shared_ptr
和weak_ptr
语义的东西,而没有所有那些荒谬的额外调用,retain
并且release
应该自动调用当(指针)变量超出范围时
这在 ObjC 上可行吗?我知道 ObjC 没有析构函数,因此当变量超出范围时无法自动调用某些东西,但是这些retain
/release
调用怎么可能真的有必要呢?我会以错误的方式解决这个问题吗?
注意到当前 Objective-C 中引用计数的实现有多糟糕......
我对此有异议。它的实施并不差。只是你对它不熟悉。 我认为这真的很简单,因为你只需要知道几条规则。所以不要因为你不熟悉就敲它。
这在 ObjC 上可行吗?
是的,这是可能的。它被称为 ARC(“自动引用计数”)。有关详细信息,请参阅“过渡到 ARC 发行说明”。
我知道 ObjC 没有析构函数
事实上,确实如此。这就是-dealloc
方法。
...当变量超出范围时
关于 Objective-C 要理解的是对象不会超出范围,因为对象只能在堆上分配(<在此处插入关于非复制块的正常警告>)。指向这些对象(即变量)的指针可以进出范围,但对象本身始终在范围内,因为从技术上讲,堆在范围内被视为全局。(只是如果你丢失了一个对象的地址,几乎不可能再次找到它)
这由 ARC 负责。除了 ARC,没有真正的好方法。在 C++ 中,您有堆栈对象,并且可以重载赋值 (=) 和遵从 (->)。共享指针都需要两者。Niether 可以在目标 C 中完成。