在 Objective C++ 中管理内存需要了解啥?

Posted

技术标签:

【中文标题】在 Objective C++ 中管理内存需要了解啥?【英文标题】:What do I need to know to manage memory in Objective C++?在 Objective C++ 中管理内存需要了解什么? 【发布时间】:2010-03-11 23:11:35 【问题描述】:

我正在 iPhone 应用程序中使用 C++ 音频库。是否有任何 Objective C / Cocoa 内存管理基础架构可以用于我的 C++ 对象,还是我需要阅读并学习 C++ 内存管理?

【问题讨论】:

您可以为 C++ 类编写包装器,在相应的 Objective-C 方法(init 和 dealloc)中分配和释放它们,然后通过这些包装器访问库,使用标准的 Cocoa 内存管理技术(甚至自动释放也可以)。 Felixyz:你是对的,但是这会假设你理解 c++ 内存管理吗?例如。什么是 newdelete 以及变量的范围?您会从不了解管理内存等基本问题的开发人员那里购买和应用程序吗?最重要的是,如果他是 Objective-c 开发人员,那么将很容易理解 C++ 内存管理,因为它是 Objective-c 提供的功能的一个子集。 【参考方案1】:

当我讨论和比较 Objective-C 内存管理和惯用的 C++ 内存管理时,您可能会发现 my latest blog post useful,至少是前半部分。

执行摘要是大多数 C++ 开发人员使用smart pointers。

对于 Objective-C++,还有一些额外的事情需要担心——尤其是(至少在默认情况下),作为 Objective-C 类成员的 C++ 值类型没有自动为您调用的构造函数或析构函数。当然,你可以明确地调用它们——但这很难看。就我个人而言,我倾向于通过侵入式指针(智能、引用计数、引用计数保存在对象本身内的指针——很像 Obj-C 指针——这就是为什么它们非常适合)来保存它们。

【讨论】:

完全同意您的帖子:“我的观点是,由于智能指针 - 通过确定性破坏实现...... C++ 中并没有真正错过垃圾收集。”

以上是关于在 Objective C++ 中管理内存需要了解啥?的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C 自动释放内存管理

在objective-c中捕获内存泄漏的设计模式?

Objective-C高级编程:iOS与OS X多线程和内存管理

不同语言的内存管理是不是足够相似以转移我的知识?

C++内存管理

C++内存管理