/ / Як перетворити NSArray в NSString ** - aim-c, nsstring, nsarray

Як перетворити NSArray в NSString ** - об'єктивно-c, nsstring, nsarray

У мене є NSArray, який містить об'єкти NSString. Я хочу створити об'єкт NSString ** з цих рядків.

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

Чи є нелокальне рішення? Чи можемо ми якось виділити myStrings в пулі автовипуску або отримати ручку до властивостей об'єктів у myArray і використовувати це?

Відповіді:

3 для відповіді № 1

ВІДПОВІДАЛЬНІСТЬ: Ти не повинен цього робити.

З цього приводу, ось як можна створити C масив покажчиків NSString з NSArray, підкріплений автоматично випущеною пам'яттю:

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, the myArray і myData об’єкти будуть випущені, як тільки вони вийдуть за межі сфери, так myStrings буде вказувати на звільнення "d" пам'яті, як тільки вона буде повернута з методу.