將對象添加到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];
然後將整個陣列從首選項恢復:
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];
很高興看到更多的代碼示例在問題中。理解上下文有點混淆。 –