如何将NSArray转换为NSString **

时间:2016-01-22 21:27:53

标签: objective-c nsstring nsarray

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

function addSchools() {
    for (var i = 0; i < schoolArray.length; i++) {
      groupId = schoolArray[i][2]
      optionText = schoolArray[i][0]
      //console.log(optionText)
      isUserMemberOfGroup(currentUserId, groupId,
        function(isCurrentUserInGroup) {
          console.log(optionText) //put it here!
          if (isCurrentUserInGroup)
            console.log('yes');
          else
            console.log('no');
        },
        function(sender, args) {
          console.log(args.get_message());
        });;;
    }

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

1 个答案:

答案 0 :(得分:3)

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

也就是说,这里是如何从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会立即指向免费内存从方法中返回。