快速发布

发布于 2024-08-30 03:12:34 字数 572 浏览 8 评论 0原文

如何简洁地处理这种情况。我没有在 if 语句中正确释放 contactDictionary...

    NSNumber *pIDAsNumber;
     ...        
    NSMutableDictionary *contactDictionary = [NSMutableDictionary dictionaryWithDictionary:[defaults dictionaryForKey:kContactDictionary]];
    if (!contactDictionary) {
            contactDictionary = [[NSMutableDictionary alloc] initWithCapacity:1];
    }
    [contactDictionary setObject:pIDAsNumber forKey:[myClass.personIDAsNumber stringValue]];
    [defaults setObject:contactDictionary forKey:kContactDictionary];

How to succinctly handle this situation. I'm not properly releasing contactDictionary in the if statement...

    NSNumber *pIDAsNumber;
     ...        
    NSMutableDictionary *contactDictionary = [NSMutableDictionary dictionaryWithDictionary:[defaults dictionaryForKey:kContactDictionary]];
    if (!contactDictionary) {
            contactDictionary = [[NSMutableDictionary alloc] initWithCapacity:1];
    }
    [contactDictionary setObject:pIDAsNumber forKey:[myClass.personIDAsNumber stringValue]];
    [defaults setObject:contactDictionary forKey:kContactDictionary];

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

残疾 2024-09-06 03:12:34

通常,使用 [NSMutableDictionary DictionaryWithCapacity:1] 而不是 alloc/init。这将为您提供一个自动释放的字典,从内存管理的角度来看,其行为与上面的字典相同。但是......

在这种特定情况下,您的 if 子句永远不会为真(除非您耗尽内存,在这种情况下您会遇到更大的问题)。 -dictionaryWithDictionary: 如果传递 nil,则返回一个空字典而不是 nil。因此,即使 -dictionaryForKey: 返回 nil,-dictionaryWithDictionary: 仍然会创建一个空的可变字典供您添加。

Normally, use [NSMutableDictionary dictionaryWithCapacity:1] instead of alloc/init. That will give you an autoreleased dictionary that will, from a memory management perspective, behave identically to the one above. However...

In this specific case, your if clause will never be true (unless you run out of memory, in which case you have bigger problems). -dictionaryWithDictionary: returns an empty dictionary rather than nil if it is passed nil. So, even if -dictionaryForKey: returns nil, -dictionaryWithDictionary: will still create an empty mutable dictionary for you to add to.

淡看悲欢离合 2024-09-06 03:12:34

您可以完全删除 if 语句,因为 -[NSMutableDictionarydictionaryWithDictionary:] 始终返回一个字典。

另外,不要使用 [NSMutableDictionarydictionaryWithCapacity:1] 来获取空的、自动释放的可变字典。只需使用[NSMutableDictionary 字典]

You can drop the if statement entirely, because -[NSMutableDictionary dictionaryWithDictionary:] always returns a dictionary.

Also, don't use [NSMutableDictionary dictionaryWithCapacity:1] to get an empty, autoreleased mutable dictionary. Just use [NSMutableDictionary dictionary].

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文