如何将 NSArray 转换成 NSString**

How to convert NSArray into NSString**

我有一个包含 NSString 对象的 NSArray。我想从这些字符串创建一个 NSString ** 对象。

NSArray * myArray = [NSArray arrayWithObjects:@"a",@"b",@"c",nil];
NSString ** myStrings = ??? // an array of NSString*

有没有非malloc的解决方案?我们能否以某种方式在自动释放池中分配 myStrings,或者获取 myArray 中对象 属性 的句柄并使用它?

免责声明:你不应该这样做。

也就是说,这里是如何从 NSArray 创建 NSString 指针的 C 数组,由自动释放的内存支持:

NSArray * myArray = [NSArray arrayWithObjects:@"a",@"b",@"c",nil];
NSMutableData * myData = [NSMutableData dataWithLength:(sizeof(NSString *) * myArray.count)];    
NSString ** myStrings = myData.mutableBytes;
for (int i = 0; i < myArray.count; i++) {
    myStrings[i] = myArray[i];
}

从内存管理的角度来看,这是一个糟糕的想法。

每个myStrings[i]的值只在myArray被保留的时候有效,而myStrings的值只在myData的时候有效被保留。

在 ARC 下,myArraymyData 对象将在超出范围后立即释放,因此 myStrings 将尽快指向已释放的内存从方法返回。