nil>init"更新 NSMutableDictionary 的可接受方法?-6ren"> nil>init"更新 NSMutableDictionary 的可接受方法?-下面的方法是更新 NSMutableDictionary 的可接受的(即最佳实践,非 hacky)方法吗? 基本上我想要该方法来检查字典是否已初始化/填充。如果没有,那么我希望它继续并用我拥有的一组 -6ren">
gpt4 book ai didi

iphone - "Release>nil>init"更新 NSMutableDictionary 的可接受方法?

转载 作者:行者123 更新时间:2023-11-29 05:01:22 24 4
gpt4 key购买 nike

下面的方法是更新 NSMutableDictionary 的可接受的(即最佳实践,非 hacky)方法吗?

基本上我想要该方法来检查字典是否已初始化/填充。如果没有,那么我希望它继续并用我拥有的一组 iVar 和匹配的键组填充它。

如果它已经被初始化/填充,我想要刷新,并且我想避免为字典中的每个元素写出 setObject:forKey:

所以...

  1. “Release”>“Set nil”>“Re-init”是刷新此字典的可接受方法吗?
  2. 如果是这样,这是对大值字典执行此操作的唯一方法,除非我想逐行重复 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,所有对象也是如此,因此假设 object1object2 等实际上是 self.object1self.object2...
  • 此外,我直接访问了 fetchDataDict iVar 来进行 releasenil,因为我认为这就是我们应该做的,但是如果我错了,请纠正我。

这个问题是为了学习,所以欢迎长篇大论!

最佳答案

由于您正在使用属性访问器,并且我假设您将属性标记为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];
}

}

关于iphone - "Release>nil>init"更新 NSMutableDictionary 的可接受方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6837917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com