Добавление объектов в NSArray приводит к тому, что NSArray сохраняет каждый объект.
Так что в случае, когда вы создаете экземпляры объектов, а затем добавляете их в массив, эти объекты не нужно дополнительно хранить:
// saving strings inside an array, then array to the NSUserDefaults
NSString *string1 = @"My String 1";
NSString *string2 = @"My String 1";
NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:10];
[arr addObject:string1];
[arr addObject:string2];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];;
[prefs setObject:arr forKey:@"MyArray"];
[arr release];
Затем, чтобы восстановить весь массив из prefs:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSArray *array = [prefs objectForKey:@"MyArray"];
Альтернативно, чтобы сохранить строки под отдельными ключами, это будет выглядеть примерно так:
[prefs setObject:[arr objectAtIndex:0] forKey:@"MyFirstStringKey"];
[prefs setObject:[arr objectAtIndex:1] forKey:@"MySecondStringKey"];
Для восстановления вы также просто добавите элементы в массив, сохранение не требуется:
// assuming this time several keys added to an array
// also note using autoreleased version of array - much easier
NSMutableArray *arr = [NSMutableArray arrayWithCapacity:10];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];;
[arr addObject:[prefs objectForKey:@"MyFirstStringKey"]];
[arr addObject:[prefs objectForKey:@"MySecondStringKey"]];
// then assign arr or use it otherwise
Также проще использовать не изменяемый массив и создать экземпляр массива со списком объектов, которые выхотите иметь в массиве:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];;
NSArray *arr = [NSArray arrayWithObjects:[prefs objectForKey:@"MyFirstStringKey"], [prefs objectForKey:@"MySecondStringKey"], nil];