我的目标是能够更新NSUserDefaults中的对象。
这是我的方法,我担心的是当我使用removeObjectForKey替换数组时,是否存在可以创建的内存问题。数组中的对象通过initWithArray保存在objectArray中: oldSavedArray是具有NSUserDefaults先前内容的数组。
objectArray = [[NSMutableArray alloc] initWithArray:oldSavedArray];
if ([objectArray containsObject:myObject]){
// remove the current object
[objectArray removeObject:_currentFood];
// reset our new array of objects
[_defaults removeObjectForKey:@"mySavedData"];
[_defaults setObject:[NSKeyedArchiver archivedDataWithRootObject:objectArray] forKey:@"mySavedData"];
}
else{
// add the current object
[objectArray addObject:_currentFood];
// reset our new array of favorite food
[_defaults removeObjectForKey:@"mySavedData"];
[_defaults setObject:[NSKeyedArchiver archivedDataWithRootObject:objectArray] forKey:@"mySaveData"];
}
答案 0 :(得分:1)
回答你的问题
使用“removeObjectForKey”是否存在内存问题?。
我的回答是否定的。但这一步是没有必要的。
[defaults setObject:forKey:]
就够了。
答案 1 :(得分:0)
您不必使用NSKeyedArchiver archivedDataWithRootObject:
。您只需传入数组即可。此外,setObject
会保留该项目,因此您最后应release
objectArray
。