下面的方法是否可以更新NSMutableDictionary( 基本上我希望该方法检查字典是否已经初始化/填充。如果它没有,那么我希望它继续使用一组匹配的iVars填充它,并使用匹配的一组键。 如果它已经被初始化/填充,我想要刷新,我想避免为dict中的每个元素写出 因此... 谢谢!代码如下: 小调: 这个问题以学习为中心,欢迎长时间的解释! setObject:forKey:
。
setObject:forKey:
- (void) populateFetchDataDict {
if (!self.fetchDataDict) {
self.fetchDataDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:object1, @"key1", object2, @"key2", object3, @"key3", object4, @"key4", nil];
} else {
[fetchDataDict release];
fetchDataDict = nil;
self.fetchDataDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:object1, @"key1", object2, @"key2", object3, @"key3", object4, @"key4", nil];
}
}
fetchDataDict
与所有对象一样是iVar,因此假设object1
,object2
等实际上是self.object1
,self.object2
... fetchDataDict
iVar release
和nil
,因为我认为这是我们应该做的,但如果我错了,请纠正我。
答案 0 :(得分:1)
由于您正在使用属性访问器,并且我假设您将属性标记为retain
,因此您只需设置新值 - 旧的将自动释放。事实上,你的代码现在没有崩溃的唯一原因是因为你过度保留新词典而不是自动释放它们,你应该这样做。
事实上,您的代码可能看起来像:
- (void) populateFetchDataDict {
self.fetchDataDict = [NSMutableDictionary dictionaryWithObjectsAndKeys:object1, @"key1", object2, @"key2", object3, @"key3", object4, @"key4", nil];
}
如果您只想在现有字典中设置这些特定值,则可以在if语句中添加回来并将这些默认值与现有字典合并:
- (void) populateFetchDataDict {
NSDictionary *defaultDict = [NSMutableDictionary dictonaryWithObjectsAndKeys:object1, @"key1", object2, @"key2", object3, @"key3", object4, @"key4", nil];
if (!self.fetchDataDict) {
self.fetchDataDict = defaultDict;
} else {
[self.fetchDataDict addEntriesFromDictionary:defaultDict];
}
}