3

我正在为带有 ARC 的 iOS 使用 Xcode 4.6 编程。

我正在使用一个简单的整数数组,当使用 NSMutableArray 时,它可以在下面的代码中正常工作。

NSMutableArray *_array; // variable
...
_array = [[NSMutableArray alloc] initWithCapacity:capacity]; // allocation 
... 
[_array addObject:[NSNumber numberWithInt:int_number]]; // inserting 
... 
return [[_array objectAtIndex:i] integerValue]; // retrieving

然而,这并没有表现得那么好,因为我在数组中进行了很多查找,并且所有的拆箱和可能的 NSMutableArray 本身有点慢。

在我的代码的其他部分,我已经用一个简单的 c-array 替换了 NSMutableArray,并且有了很大的改进,但是在这一部分中,我正在使用可变长度数组并且不能使用简单的 c-array。所以我正在尝试使用 C++ 数组。在 Xcode 中,我将文件从 .m 重命名为 .mm(编译为 Objective-C++)并使用下面的代码编译得很好,但是当它运行时会导致 EXC_BAD_ACCESS 错误,我找不到原因。我需要在这里进行一些手动垃圾收集吗?

int *_array; // variable
...
_array = new int[capacity]; // allocation
...
_array[i] = int_number; // inserting
...
return _array[i]; // retrieving
4

2 回答 2

4

我会说这是一个非常安全的猜测,假设您访问了数组之外的元素,即您的iwas >= capacity。是的,您最终将不得不手动delete[]分配使用new. 绝对从您发布的这个片段来看,它看起来会泄漏,所以也许您想在上下文中提供更多代码,例如定义变量的位置(本地或在类中或任何地方)以及如何访问数据等。

于 2013-08-18T19:25:47.107 回答
1

你想要C++ 变长数组吗?然后vector就是您所追求的,而不是您尝试使用的C 数组。

std::vector<int> _array; // variable
...
_array.reserve(capacity); // allocation
...
_array[i] = int_number; // inserting
...
return _array[i]; // retrieving
于 2013-08-19T04:38:43.553 回答