从NSUserDefaults中删除数组时出现内存问题

时间:2012-03-17 01:48:38

标签: iphone objective-c ios xcode

我的目标是能够更新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"];
        }

2 个答案:

答案 0 :(得分:1)

回答你的问题

  

使用“removeObjectForKey”是否存在内存问题?。

我的回答是否定的。但这一步是没有必要的。

[defaults setObject:forKey:]

就够了。

答案 1 :(得分:0)

您不必使用NSKeyedArchiver archivedDataWithRootObject:。您只需传入数组即可。此外,setObject会保留该项目,因此您最后应release objectArray