在c ++类中保留ARC对象

Rog*_*rat 13 objective-c automatic-ref-counting

我有一些代码必须保留为c ++,但我需要在这些c ++类中存储objective-c对象.当它们存储在这里时,它们不会被其他任何地方引用,所以我不能将它们从我的下面删除.在ARC之前,我只是在将它们放入c ++类之前保留它们,并在它们被删除时自动释放它们.一切都有罚款.

但是对于ARC,我不知道该怎么做.是否使c ++变量__unsafe_un得足够?似乎不是因为一旦obj-c代码不再使用那些对象它将被删除,或者我不理解__unsafe_unretained做了什么.我可以在ARC下调用CFRetain()和CFAutorelase()吗?

在ARC下处理这个问题的正确方法是什么?NSArray做了什么深入了解它所存储的对象?

rob*_*off 5

您可以在 ARC 下调用 CFRetain 和 CFRelease。您负责平衡每个 CFRetain 和一个 CFRelease,因为 ARC 不关注这些功能。

没有 CFAutorelease 功能。您可以使用objc_msgSend(myObject, sel_registerName("autorelease")). 您在这里跳过的圈套应该是一个危险信号,表明您正在做的事情可能是错误的。

一般来说,最好在 ARC 下找到一种方法,不要将对象引用存储在其他无类型的内存 blob 中。请注意,可以限定 C++ 对象的成员变量,__strong或者__weak将它们编译为 Objective-C++。

更新

Mac OS X 10.9 和 iOS 7.0 的公共 SDK 包含一个CFAutorelease功能,您甚至可以在 ARC 下使用该功能。