objective-c - 快速发布

标签 objective-c cocoa cocoa-touch release retain

如何简洁地处理这种情况。我没有在 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];

最佳答案

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

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

关于objective-c - 快速发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2695099/

相关文章:

ios - 如何检测splitViewController隐藏?

cocoa - KVO 的添加和删除观察者方法——计数还是幂等?

objective-c - 如何在 Objective C 数据模型类中使用 Codable 协议(protocol)?

iphone - 动态创建的标签被覆盖

java - j2objc直接引用无法解析(用Maven结构/src/main/java)

objective-c - 自定义基于 View 的 nstableview 调整大小

objective-c - 在 NSButton 上使用 -setImage

cocoa - 在可以轻松更改区域格式的设备上保留 Cocoa 中的货币格式

ios - 仅视网膜设备的图像名称?

ios - 自定义 UISlider 外观