3

我正在编写一些 iOS 应用程序并面临是否在 c++ 类中包含objective-c 对象的决定。在互联网上搜索数小时后,我发现关于在 Objective-c 中使用(有时人们使用“包装”而不是“使用”)c++ 类的讨论很多,而相反的则非常有限。所以我的第一个问题是,在 c++ 类中有objective-c 数据成员是否被认为是合适的(有时甚至是必要的/方便的)?

如果这是编写 iOS 应用程序的一种非常正常的做法,关于内存,我如何管理 c++ 类中的 Objective-c 数据成员,1)使用 ARC 和 2)使用 MRC?特别是,为了正确地为具有objective-c成员的c++类编写构造函数和析构函数,我应该知道任何经验法则吗?

4

1 回答 1

2

是的,你可以这样做。这并不奇异。

  1. 在 ARC 中:您只需使用它,它就可以工作。请注意,如果您将 Objective-C 数据成员放入没有构造函数或析构函数的类(“POD”类)中,您将收到警告,因为如果将该定义同时导入 ARC 和 MRC 代码,将会发生坏事。如果是这种情况,解决方案是添加一个虚拟构造函数或析构函数。

  2. 在 MRC 中:您需要按照针对实例变量的正常 MRC 内存管理规则来保留和释放它。即,如果您分配给它,请确保释放以前的值并保留新值。在类的析构函数中(如果还没有析构函数,则添加析构函数),您需要释放它。此外,在构造函数中,确保初始化对象指针(指向nil或其他值),因为 C/C++ 中的指针不会自动初始化。

于 2013-07-17T05:55:27.853 回答