Objective c 如何将NSArray转换为NSString**

Objective c 如何将NSArray转换为NSString**,objective-c,nsstring,nsarray,Objective C,Nsstring,Nsarray,我有一个包含NSString对象的NSArray。我想从这些字符串创建一个NSString**对象 NSArray * myArray = [NSArray arrayWithObjects:@"a",@"b",@"c",nil]; NSString ** myStrings = ??? // an array of NSString* 是否存在非malloc解决方案?我们是否可以在自动释放池中分配mystring,或者获取myArray中objects属性的句柄并使用它?免责声明:您不应该这

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

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

是否存在非malloc解决方案?我们是否可以在自动释放池中分配mystring,或者获取myArray中objects属性的句柄并使用它?

免责声明:您不应该这样做

也就是说,以下是如何从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];
}
NSArray*myArray=[NSArray数组,其对象为:@“a”、“b”、“c”、“nil];
NSMutableData*myData=[NSMutableData dataWithLength:(sizeof(NSString*)*myArray.count)];
NSString**myStrings=myData.mutableBytes;
对于(int i=0;i
从内存管理的角度来看,这是一个糟糕的想法

每个
myStrings[i]
值仅在保留
myArray
时有效,而
myStrings
值仅在保留
myData
时有效


在ARC下,
myArray
myData
对象一旦超出范围就会被释放,因此
myStrings
一旦从方法返回,就会指向释放的内存。

你看了吗?恼人的部分是你可能不习惯的malloc/freeARC@luk2302很好的参考资料,但我正在寻找一个非malloc的解决方案,如果存在的话-我会编辑这个问题-出于好奇,可能没有,您使用的是什么需要NSStrings的C数组?您真的必须返回NSStrings数组还是只返回NSStrings**,这并不一定意味着您要将其用作数组。您在这里向我展示了一些我不知道的东西(NSMutableData)。调用函数中有一个显式的自动释放池块,所以我猜您的解决方案是正确的,因为他们没有使用ARC。