我有一个包含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中对象属性的句柄并使用它?
答案 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下,myArray
和myData
个对象一旦超出范围就会被释放,因此myStrings
会立即指向免费内存从方法中返回。