2013-07-16 28 views
3

我正在写一些iOS应用程序,并面临是否要在C++类中包含objective-c对象的决定。经过几个小时在互联网上搜索,我发现讨论使用(有时人们使用'包装'而不是'使用')在objective-c中的C++类是丰富的,而相反是非常有限的。所以我的第一个问题是,是否认为在C++类中拥有objective-c数据成员是合适的(有时甚至是必要/方便的)?C++类中Objective-c对象的内存管理

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

回答

2

是的,你可以做到这一点。这并不奇异。

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

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

+0

感谢您的回复。这种做法是否记载在苹果的文献或任何其他资源中,我可以找到更多的细节? –