【问题标题】:Is there a difference between [NSMutableDictionary dictionaryWithDictionary:] and mutableCopy?[NSMutableDictionary dictionaryWithDictionary:] 和 mutableCopy 之间有区别吗?
【发布时间】:2026-02-25 02:45:02
【问题描述】:

以下创建可变字典的方式有区别吗?

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:dict2];

NSMutableDictionary *dict = [dict2 mutableCopy]

【问题讨论】:

    标签: objective-c nsdictionary nsmutabledictionary


    【解决方案1】:

    如果dict2nil[NSMutableDictionary dictionaryWithDictionary:dict2] 将返回一个空字典,[dict2 mutableCopy] 将返回nil

    【讨论】:

      【解决方案2】:

      一个细微的区别是dictionaryWithDictionary: 类方法返回一个自动释放的对象,而mutableCopy 方法返回一个保留对象。如果使用自动引用计数,则没有区别;如果关闭ARC,则需要向通过第二个sn-p获取的dict发送release消息。

      【讨论】:

      • 如果dict2 为nil,mutableCopy 将返回nil,而dictionaryWithDictionary:nil 将始终返回NSMutableDictionary
      【解决方案3】:
      NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:dict2];
      
      • 返回一个autoreleased 对象。
      • 如果dict2nil,仍然返回一个有效的空NSMutableDictionary

      NSMutableDictionary *dict = [dict2 mutableCopy];

      • 返回您负责释放的 copied 对象(在非 ARC MRR 中)。
      • 如果dict2nil,则返回nil

      【讨论】:

        最近更新 更多