gpt4 book ai didi

objective-c - 在 C++ 类中保留 ARC 对象

转载 作者:太空狗 更新时间:2023-10-30 03:20:42 28 4
gpt4 key购买 nike

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

但是对于 ARC,我不确定该怎么做。使 C++ 变量 __unsafe_unretained 足够了吗?看起来不像是因为一旦 obj-c 代码不再使用该对象,它将被删除,或者我不理解 __unsafe_unretained 的作用。我可以在 ARC 下调用 CFRetain() 和 CFAutorelase() 吗?

在 ARC 下处理这个问题的正确方法是什么? NSArray 到底做了什么来保留它存储的对象?

最佳答案

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

没有 CFAutorelease 函数。您可以使用 objc_msgSend(myObject, sel_registerName("autorelease")) 执行自动释放。您在此处跳过的障碍应该是一个危险信号,表明您正在做的事情可能是错误的。

一般来说,在 ARC 下最好找到一种方法不将对象引用存储在其他未类型化的内存块中。注意 member variables of C++ objects can be qualified __strong or __weak如果您将它们编译为 Objective-C++。

更新

Mac OS X 10.9 和 iOS 7.0 的公共(public) SDK 包含一个 CFAutorelease 函数,即使在 ARC 下也可以使用。

关于objective-c - 在 C++ 类中保留 ARC 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8569460/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com